Skip to content

OTR_IllegalOperationPrevention

nishi_74322014 edited this page Oct 27, 2026 · 1 revision

不正操作防止

概要

Web アプリケーションでの二重送信・戻る・リロードなどの「不正操作」を防ぐ機能。

  • Open 棟梁の不正操作防止機能(Request Ticket)・二重送信防止機能は、ASP.NET Web Forms 専用である(MVC には無い)。
  • キャッシュ無効化・画面遷移制御・不正操作防止は三点セットで設計する。

詳細

不正操作の分類と対策

不正操作 現象 主な対策(C = クライアント、S = サーバ)
① 新規ウィンドウ 複数ウィンドウで同じ業務を行い、Session が競合する S:画面遷移制御、ブラウザ・ウィンドウ別 Session 領域
② URL の直打ち 前提の画面を経ずに入り、Session 不足でエラーになる S:画面遷移制御で GET を拒否
③ 二重送信 多重クリックなどで同じ要求が複数届き、二重更新・キー重複になる C:二重送信防止機能、S:不正操作防止機能
④ 戻る 戻ってから再送信する(③と同じ) S:キャッシュ無効化+不正操作防止機能
⑤ リロード 前の要求が再送される(③と同じ) S:不正操作防止機能
⑥ 読み込み停止後の操作 中止後に再送信する(③と同じ) S:不正操作防止機能

不正操作防止機能(Request Ticket)

  • 「送信済みのフォームの再現」(二重送信、リロード、戻ってからの再送信、キャッシュの参照)を検出する。
  • 仕組み:マスタページの隠しフィールド RequestTicketGuid と、Session 上のキュー(世代管理)をサーバで突き合わせる。
  • 検出すると例外になるが、セッションは解放せず、業務は続行できる。
設定キー 内容
FxRequestTicketGuidMaxQueueLength 世代数(実質「戻るを何段まで許すか」)。0 以下で OFF
FxDoubleTransmissionCheck 二重送信防止(クライアント側)
FxButtonhistoryMaxQueueLength ボタン履歴
FxWindowGuidMaxQueueLength / FxScreeenGuidMaxQueueLength ブラウザ・ウィンドウ別/親画面別の Session 領域
FxCacheControl キャッシュ無効化(MVC でも効く)
  • 誤検知が出る画面は、画面ごとに CanCheckIllegalOperation で動作を変える(または OFF にする)。
  • マスタページの隠しフィールドが無いと動かない(P層(ASP.NET Web Forms)の実装)。

MVC・最近の方式

方式 目的
PRG(Post-Redirect-Get) POST の後に Redirect して GET にし、リロード・戻るによる偶発的な二重送信を防ぐ
シンクロナイザ(冪等化)トークン フォームごとに一意のトークンを発行して使い捨てにする(Request Ticket と同型)
CSRF(Anti-Forgery)トークン 目的が違う(第三者による要求の偽造を防ぐ)。ASP.NET Core では既定で有効
API の冪等化キー クライアントが一意のキーを送り、サーバで重複を排除する

コーディング・エージェントに任せる場合

  • スキル opentouryo-app-design(references/illegal-operation-prevention.md・cache-control.md)を使わせる。
  • MVC の画面をエージェントに作らせるときは、Web Forms の機能があると思い込んでいないか(PRG・冪等化を実装しているか)を確認する。

参考


Tags: 再構築

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki
開発基盤部会 Wiki

移行管理: DONE / TODO

Clone this wiki locally