Repository navigation
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:不正操作防止機能 |
- 「送信済みのフォームの再現」(二重送信、リロード、戻ってからの再送信、キャッシュの参照)を検出する。
- 仕組み:マスタページの隠しフィールド
RequestTicketGuidと、Session 上のキュー(世代管理)をサーバで突き合わせる。 - 検出すると例外になるが、セッションは解放せず、業務は続行できる。
| 設定キー | 内容 |
|---|---|
FxRequestTicketGuidMaxQueueLength |
世代数(実質「戻るを何段まで許すか」)。0 以下で OFF |
FxDoubleTransmissionCheck |
二重送信防止(クライアント側) |
FxButtonhistoryMaxQueueLength |
ボタン履歴 |
FxWindowGuidMaxQueueLength / FxScreeenGuidMaxQueueLength
|
ブラウザ・ウィンドウ別/親画面別の Session 領域 |
FxCacheControl |
キャッシュ無効化(MVC でも効く) |
- 誤検知が出る画面は、画面ごとに
CanCheckIllegalOperationで動作を変える(または OFF にする)。 - マスタページの隠しフィールドが無いと動かない(P層(ASP.NET Web Forms)の実装)。
| 方式 | 目的 |
|---|---|
| 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: 再構築
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。