「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>不正操作防止機能]] *目次 [#a33288fb] #contents *概要 [#kdaa5923] [[不正操作防止機能]]では以下を抑止します。 -二重送信 -リロード -バック・サブミット -キャッシュの参照 上記に該当するような操作を行っていないか、~ [[fiddler - http debugging proxy>http://www.telerik.com/fiddler]]等を使用して分析してみてください。 また、以下のような操作で、不正操作と誤検知されることがあります。 *誤検知 [#fda591d0] **HTTP電文欠損による誤検知 [#pe85e905] IEでは(NW帯域幅が狭い場合など)、 -Responseを受信し切る前に次のPOSTバック(Submit)を実行できることがあります。 -その場合、次のRequestからResponseに含まれる筈のFormの項目が欠損することがあり、~ 結果として、不正操作と識別されることがありますが、これは正常な動作になります。 -この問題は、[[二重送信防止機能]]をONにすることで防ぐことが出来ます。 **Sessionタイムアウト・消去による誤検知 [#s4b06a06] Sessionにブラウザ・ウィンドウ毎のRequestチケットを格納しているので、~ Sessionタイムアウト発生や、Session消去後に残存画面からPOSTバック(Submit)すると、~ 不正操作と誤検知されることがあります。 **AJAXによる誤検知 [#u15ee0a3] -ASP.NET AJAXではHTTPリクエストの内容から、~ AJAXの要求であることを識別して、不正操作防止機能を動作させない造りをしています。 --BaseController.Page_Load()~ https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Framework/Presentation/BaseController.cs#L725 -しかし、SPREAD等のASPXに対してAJAXでPOSTを行うような、~ サードパーティ製UIコンポーネントを使用する場合、~ 不正操作防止機能と干渉し合うことがあります。 -ASPXではなく、WCFやWebAPIのモジュールとAJAX通信を行う場合、干渉は起こりません。 *不正操作防止機能の局所化 [#d6aa249d] **概要 [#l82b4ccd] 他の処理と干渉し合う場合、不正操作防止機能を部分的にOFFに設定できます。 -不正操作防止機能を画面レベルでOFFにするには、Page_Initで this.CanCheckIllegalOperation = false; >と[[this.CanCheckIllegalOperationプロパティ]]にfalseのフラグを設定します。 **詳細 [#z3df98d5] ボタン単位等の局所化が必要な場合は、以下の方法に従ってください。 -一部のボタンだけ不正操作防止機能を無効にする方法、ポストバックのダウンロード処理などで有効 /// <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; } } } -一部のボタンだけ不正操作防止機能を有効にする方法、更新ボタンだけに適用したい場合などに有効 --設定 ---app.config の appSettingsセクションで、~ https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Samples/WebApp_sample/WebForms_Sample/WebForms_Sample/app.config#L41 <!-- 不正操作防止機能のon・off(操作履歴の最大数) --> <add key="FxRequestTicketGuidMaxQueueLength" value="0"/> "FxRequestTicketGuidMaxQueueLength=0"(0以下の値)を設定して、不正操作防止機能の機能OFFにします。 --実装 /// <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; } } } **参考 [#za4d3edb] -.NET用アプリケーション フレームワーク ”棟梁” 利用ガイド(ベターユース、FAQ編)~ https://github.com/OpenTouryoProject/OpenTouryoDocuments/blob/master/documents/1_User_Guide/ja-JP/7_User_Guide(BetterUse_and_FAQ).doc --2.3節:不正操作防止機能の局所化