3

そのため、フォームをもう少し安全にし、CSRF 攻撃を防ぐのに役立つ可能性があるため、非表示フィールドにランダムなトークン値を追加し、その値がサーバー側のセッション データにも保存されるようにしたいと考えています。

新しいトークンはいつ発行する必要がありますか? 実行?フォームがあるページの読み込みごとに? セッションごと?フォームが正常に送信されるとすぐに無効にすることができますが、いつフォームを生成するのか疑問に思っています。

フォームごとまたはページごとに発行する場合、ユーザーが別のウィンドウを開いて最初のフォームを送信した場合に、重複したトークン値が既存の (有効な) トークンを上書きする可能性はありませんか?

4

2 に答える 2

1

同時実行の問題を防ぐ最も簡単な方法は、ログインごとに 1 回だけ生成することです。攻撃者が CSRF を「推測」する可能性は、PHPSESSID を盗む可能性とほぼ同じ (またはそれ以下) です。パスワードなどを変更した後など、ユーザーのアクセスレベルが変更されるたびに再生成することもできます。

本当に徹底したい場合は、Web サイトのフォームごとに 1 つずつ、一連​​のトークンを生成して保存できます。しかし、CSRF トークンを盗むことができれば、セッション ID を盗んだだけで、実際に損害を与えた可能性があります。

于 2010-06-03T17:10:45.593 に答える
0
  • セッションごとに 1 つのトークンを使用する場合、送信されたフォームの重複をチェックするテクニックが必要です (ユーザーがページを更新するか、戻るボタンをクリックしたとき)。
  • フォームごとに使用する場合、ユーザーが複数のページを開くと、最後のフォームのみが機能します。
  • セッションごとに生成されたトークンの配列を使用することをお勧めします。トークンが送信されたら、それを削除する必要があります。大量のトラフィックの Web サイトがある場合、このアプローチが懸念される可能性があることを読みました。

この記事を以前に読んだかどうかはわかりませんが、CSRF セキュリティに関する優れたリソースだと思います: http://shiflett.org/articles/cross-site-request-forgeries

于 2010-11-07T10:17:26.467 に答える