「Open棟梁 wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
不正操作防止機能では以下を抑止します。
- 二重送信
- リロード
- バック・サブミット
- キャッシュの参照
上記に該当するような操作を行っていないか、
fiddler - http debugging proxy等を使用して分析してみてください。
また、以下のような操作で、不正操作と誤検知されることがあります。
誤検知 †
HTTP電文欠損による誤検知 †
IEでは(NW帯域幅が狭い場合など)、
- Responseを受信し切る前に次のPOSTバック(Submit)を実行できることがあります。
- その場合、次のRequestからResponseに含まれる筈のFormの項目が欠損することがあり、
結果として、不正操作と識別されることがありますが、これは正常な動作になります。
- この問題は、二重送信防止機能をONにすることで防ぐことが出来ます。
Sessionタイムアウト・消去による誤検知 †
Sessionにブラウザ・ウィンドウ毎のRequestチケットを格納しているので、
Sessionタイムアウト発生や、Session消去後に残存画面からPOSTバック(Submit)すると、
不正操作と誤検知されることがあります。
AJAXによる誤検知 †
- ASP.NET AJAXではHTTPリクエストの内容から、
AJAXの要求であることを識別して、不正操作防止機能を動作させない造りをしています。
- しかし、SPREAD等のASPXに対してAJAXでPOSTを行うような、
サードパーティ製UIコンポーネントを使用する場合、
不正操作防止機能と干渉し合うことがあります。
- ASPXではなく、WCFやWebAPIのモジュールとAJAX通信を行う場合、干渉は起こりません。
不正操作防止機能の局所化 †
概要 †
他の処理と干渉し合う場合、不正操作防止機能を部分的にOFFに設定できます。
とthis.CanCheckIllegalOperationプロパティにfalseのフラグを設定します。
詳細 †
ボタン単位等の局所化が必要な場合は、以下の方法に従ってください。
一部のボタンだけ不正操作防止機能を「無効」にする方法 †
ポストバックのダウンロード処理などで有効
/// <summary>不正操作防止機能の局所化</summary>
void Page_Init(object sender, EventArgs e) {
foreach (string key in Request.Form.Keys) {
if (key.IndexOf("btnIllegalOperationCheckOFF") != -1) {
// btnIllegalOperationCheckOFFボタンで
// サブミットされた場合、不正操作防止機能をOFFにする。
this.CanCheckIllegalOperation = false;
}
}
}
一部のボタンだけ不正操作防止機能を「有効」にする方法 †
更新ボタンだけに適用したい場合などに有効
- 実装
/// <summary>不正操作防止機能の局所化</summary>
void Page_Init(object sender, EventArgs e) {
// 当該画面だけ、不正操作防止機能をONにする(*.configはOFFに設定)。
this.CanCheckIllegalOperation = true;
foreach (string key in Request.Form.Keys) {
if (key.IndexOf("btnIllegalOperationCheckON") != -1) {
// btnIllegalOperationCheckONボタンで
// サブミットされた場合、不正操作防止機能をONにする。
this.CanCheckIllegalOperation = true;
}
}
}
参考 †