[[Open棟梁>https://github.com/OpenTouryoProject]] wiki

-[[戻る>アプリケーション設計のポイント]]

*目次 [#z9baef0b]
#contents

*概要 [#h829495d]
-wwwブラウザの標準の機能では、業務アプリケーションのニーズに合った不正操作の制御・抑止方法が用意されていない。

-このため、案件によっては、JavaScriptなどを使用してwwwブラウザを制御する場合もある。

-ただし、JavaScriptを使用した不正操作の制御・抑止処理をクロス ブラウザに完全に対応させることは難しいので、~
サーバ側で不正操作を検出し、以降の処理を中断し、システムに問題がおこらないように制御することもできる。

★ 不正操作の制御・抑止に関する要件を明確にしておくこと。

*不正操作防止に使用できる機能 [#c7267f68]
”Open棟梁”のASP.NET用P層フレームワークの以下の機能を使用できる。
-[[不正操作防止機能]]
-[[二重送信防止機能]]
-[[画面遷移制御機能]]
-[[ブラウザ・ウィンドウ別Session領域]]

*不正操作の種類 [#s313e5f6]
**新規ウィンドウの作成 [#z4f55627]
同一の業務を、wwwブラウザの同一プロセス上の複数ウィンドウで操作するとSessionの競合が発生する可能性がある。

※ ”Open棟梁” ASP.NET用P層フレームワークの「[[ブラウザ・ウィンドウ別Session領域]]」を使用することで、この問題を回避することができる 。

※ 仮に、1枚のブラウザ ウィンドウでの表示のみ許可するのであれば、~
>GET要求をログイン時(もしくは任意の業務開始時)の1回のみ許可して名称付きのブラウザ ウィンドウにメニュー画面を表示させる。

>以降、全ての画面遷移を
-POST + Transferで実装してGET要求を拒否する
-もしくは、 ”Open棟梁”のASP.NET用P層フレームワークの「[[画面遷移制御機能]]」を使用する

>ことで、1枚のウィンドウの制限を実現できる。

**URLの直打ち [#sc2f76c0]
-URLの直打ちによる画面表示が可能なように造られていない画面ではエラー が発生する可能性がある。
-例えば、画面遷移時の引渡し情報(Form情報、HTTPContext情報、Session情報.etc)の不足によるNull Reference例外など。

※ ”Open棟梁”のASP.NET用P層フレームワークの「[[画面遷移制御機能]]」を使用することで、この問題を回避することができる。

**二重送信 [#nd813739]
-レコードの追加時:キー重複エラー、二重追加
-レコードの更新時:二重更新(タイムスタンプ アンマッチ)
-その他、Sessionの不整合として、更新エラーやNull Reference例外。

などが発生する可能性がある。

Gecko系のWWWブラウザ(Firefoxなど)ではデフォルトで二重送信が抑止されているものもあるが、IE6.0、7.0、8.0では抑止されていない。

※ ”Open棟梁”のASP.NET用P層フレームワークの「[[二重送信防止機能]]」を使用することで、クライアント側で二重送信を防止できる。~
>また、「[[不正操作防止機能]]」を使用することで、(クライアント側で漏れた場合も、)サーバ側で「二重送信」を防止できる 。

**戻る(バック サブミット) [#q83aabfd]
二重送信と同様の現象を発生させる可能性がある。

これには、HTTPレスポンスのヘッダに「Cache-Control: no-cache」を設定しキャッシュ無効することで対応できるが、
-プロキシ サーバが存在する場合がある
-IEの「インターネット一時ファイルの設定」の「自動的に確認する」がファジーな動作を示す場合がある

など、制御し難いケースも発生し得る。

また、キャッシュ無効化だけの場合は、以下のケースで全画面に戻れてしまう。

-バックボタン押下時に前画面を取得したHTTPリクエストを再送して前画面を取得するという仕様となっているので全画面に戻れてしまう。

-これを抑止するために「ページの有効期限切れ」を表示させることもできる。~
しかし、これは前画面の取得がPOSTメソッドで、HTTPレスポンスのヘッダに「Expires: -1」が設定されている必要がある。

また、こちらも同様に挙動がファジーである。

※ ”Open棟梁”のASP.NET用P層フレームワークの「[[不正操作防止機能]]」を使用することで、サーバ側で「バック サブミット」を防止できる。

**更新(リロード) [#eb2f2050]
当該画面のレスポンスに対応する旧リクエストがサーバに再送されるため、二重送信と同様の現象を発生させる可能性がある。

ASP.NETの画面遷移直後の動作について:
-PostBack ---> Server.Transferの画面遷移直後の更新(リロード)の場合、「PostBackのPOST」から再送される。
-PostBack ---> Response.Redirectの画面遷移直後の更新(リロード)の場合、「RedirectのGET」が再送される。

このため、Response.Redirectの場合は、初期表示か否かで動作が異なる場合がある(画面初期表示のGet再送、ポストバックのPost再送)。

必要に応じて、「メニュー非表示」・「ファンクション キー抑止」などで対応可能だが、クロス ブラウザでの対応は難しい可能性がある。

※ ”Open棟梁”のASP.NET用P層フレームワークの「[[不正操作防止機能]]」を使用することで、サーバ側で(リロード)を防止できる。

**読み込みの停止後の操作 [#f3141c33]
-読み込みを停止して、再びサブミットすることにより、二重送信と同様の現象を発生させる可能性がある。
-必要に応じて、「メニュー非表示」・「ファンクション キー抑止」などで対応可能だが、クロス ブラウザでの対応は難しい可能性がある。

※ ”Open棟梁”のASP.NET用P層フレームワークの「[[不正操作防止機能]]」を使用することで、(読み込みの停止後の操作)を防止できる。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS