クエリ文字列が「改ざんされた」場合に備えて、クエリ文字列の「チェック」とログを追加したいと考えています。特定のページの Page_Init イベントは、ASP.Net ページのライフサイクルでそれを行うのに適切な場所ですか?
2 に答える
私の一般的なルールは、すべてをできるだけ早く行うことです。これには、クエリ文字列の検証がページに依存しない限り、Application.BeginRequest (ページが読み込まれる前にイベントが発生する可能性があります) の早い段階でのチェックが含まれる場合もあります。
ここでの質問は、「何を改ざんしていると思いますか?」です。無効なキーですか? 無効な値ですか? XSS 攻撃の一部として結果のページに書き込まれる可能性があるタグをエンコードしようとしていますか?
何を達成しようとしているのかを知らずに具体的なアドバイスをすることは困難です。
EDIT : アプリケーション イベントにアクセスするには、[新しい項目の追加] オプションからグローバル アプリケーション クラスをプロジェクトに追加します。
すべての要求はアプリケーション ライフサイクルをトリガーし、要求ハンドラーが aspx ファイルである場合、ページ ライフサイクルはその中の単なるサブプロセスです。
EDIT2 : クエリ文字列データのクリーニングは、データの使用目的に完全に依存します。クエリ文字列データの潜在的に危険な用途には、次のものがあります。
- SQL コマンドの値: 「パラメーター化されたクエリ」を使用することで、SQL インジェクションを大幅に軽減できます。
- ファイルの場所: サーバーの NTFS アクセス許可が緩い場合、これを使用して、サーバーがハード ドライブ上の任意のファイルを空にすることができます。
- HTML 応答に書き込まれる値: ユーザーはタグをエンコードし、JavaScript を実行できます。必ず Server.Encode() を使用するか、文字列を手動でクレンジングしてください。
ID 値: ID 値を格納するためにクエリ文字列を使用している場合、ユーザーはそれらを他のものに置き換えて、表示されるべきではないものに関する情報にアクセスしようとする可能性があります。その例は次のとおりです。
ユーザーは知識に基づいた推測を行い、これを次のように変更します。
http://domain.com/somepage.aspx?userid=0
これにより、管理者ユーザーが表示される可能性があります。
クエリ文字列の暗号化と復号化を使用するためにプロジェクトで従うこと。暗号化および復号化機能のクラスをお送りします。ただし、参考までに、役立つ場合は次の URL から始めることができます。
http://geekswithblogs.net/casualjim/articles/64639.aspx
これでテンパると解読できませんでした。ページレベルの例外を記述して、適切なエラーページにリダイレクトできます。
特定の点についてさらに情報が必要な場合はお知らせください。
乾杯!!!