7

asp.netで、CSRF攻撃を軽減するためにIHttpModuleを実装しています。GETでasp.netSessionIDを使用して非表示のフォームパラメーターを応答htmlに挿入します。次に、POSTで、非表示のパラメーターの値が現在のSessionIDと一致することを確認します。私の知る限り、SessionID値を取得する唯一の方法は、Cookieから取得することです。これは、悪意のあるサイトによって読み取られたり、判別されたりすることはありません。私が見落としているものはありますか?

4

2 に答える 2

8

このアプローチは正しいです。XSRF 保護を POST のみに適用しているため、GET 操作を介して利用可能なすべてのアクションが「安全」であることを確認する必要があります (これはとにかくベスト プラクティスです)。

追加の保険として、GET でも使用できます (すべてのリンクに URL パラメーターを追加し、すべての GET 要求でそれをチェックすることにより) が、面倒です。

あなたが過度に偏執的である場合は、代替 ID に別の乱数を選択できます。これにより、ブラウザーが誤ってセッション Cookie を別のサイトの悪意のある Javascript にアクセスできるようにした場合でも、ユーザーを保護できます。セッションが作成されたら、別の大きな乱数を選択してセッションに保存します。

于 2009-02-05T23:03:08.473 に答える
6

理想的には、セッション ID 以外のものを使用する必要がありますが、基本的にはそれだけです。OWASP は、ユーザーのセッションに保存されているランダムなフォーム要素名を使用することを提案しています。この方法では、攻撃者は正しい隠しフィールドを偽造することさえできなくなります。

http://www.owasp.org/index.php/Top_10_2007-A5#保護

于 2009-02-05T23:01:46.980 に答える