「[[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/CS/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]
ボタン単位等の局所化が必要な場合は、以下の方法に従ってください。

-一部のボタンだけ不正操作防止機能を無効にする方法、ポストバックのダウンロード処理などで有効
***一部のボタンだけ不正操作防止機能を「無効」にする方法 [#f306b451]
ポストバックのダウンロード処理などで有効
 /// <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;
     }
   }
 }

-一部のボタンだけ不正操作防止機能を有効にする方法、更新ボタンだけに適用したい場合などに有効
***一部のボタンだけ不正操作防止機能を「有効」にする方法 [#wc730b63]
更新ボタンだけに適用したい場合などに有効

--設定
---app.config の appSettingsセクションで、~
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/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節:不正操作防止機能の局所化

IP:202.246.252.97 TIME:"2019-07-08 (月) 09:44:01" REFERER:"https://opentouryo.osscons.jp/index.php?cmd=edit&amp;page=%E4%B8%8D%E6%AD%A3%E6%93%8D%E4%BD%9C%E9%98%B2%E6%AD%A2%E6%A9%9F%E8%83%BD%E3%81%AE%E8%AA%A4%E6%A4%9C%E7%9F%A5" USER_AGENT:"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS