1

CSRF防止のためのPHPクラスを書いています。

$_SERVER['HTTP_USER_AGENT']クラスはCSRFトークンを生成し、後でそれらをチェックできますが、リクエストが同じブラウザー( )および同じIP( )からのものであるかどうかを(追加として)確認することもでき$_SERVER['REMOTE_ADDR']ます。一部のユーザーは動的IPアドレスを持っている可能性があり、これらのアドレスは変更される可能性があることを私は知っています。だから私の質問は:ユーザーのIPアドレスが2つのリクエスト間で変更される可能性がありますか?ユーザーエージェントもチェックする必要がありますか、$_SERVER['REMOTE_ADDR']それともユーザーエージェントのみをチェックする必要がありますか?

4

2 に答える 2

2

だから私の質問は:ユーザーのIPアドレスが2つのリクエスト間で変更される可能性がありますか?

はい

$ _SERVER ['REMOTE_ADDR']もチェックする必要がありますか、それともユーザーエージェントのみをチェックする必要がありますか?

必要はありません-あなたは自分のためにより多くの仕事をしているだけです。詳細については、CSRFに関するOWASPガイドを確認してください。CSRF攻撃を防ぐための最善の方法はここで確認できます。注-OWASPは、CSRFトークンを使用していない場合にのみ、CSRFのヘッダーを確認することをお勧めします。

于 2013-01-07T09:30:05.633 に答える
1

IPアドレスは頻繁に変更される可能性があるため、アンチCSRFの信頼性が低く、これらのユーザーはWebアプリケーションを使用できなくなります。AOLは、リクエスト間でIPを切り替えることが知られているISPの例です。

ユーザーエージェントもまた、あまり信頼できません。通常、ソフトウェアバージョンの詳細と、インストールされているソフトウェアまたはプラグインの名前が含まれているため、これも変更される可能性があります。また、ユーザーエージェントは(HTTPリクエスト内の)セッションID cookieと同じ場所に送信されるため、攻撃者がセッションIDを取得できる場合は、関連付けられたユーザーエージェントをすでに持っているか取得できる可能性があります。 。

最良の形式は、CSRF保護は、アクションが実行されるときにチェックされるトークンを生成することです。理想的には、トークンはセッション全体で変更され、静的なままではないはずです。

于 2013-01-07T09:29:19.763 に答える