0

Kunststube-CSRFP demo.php をサーバーに配置して、[ http://domain1.com/demo.phpTRY IT] ボタンをクリックすると、次のように表示されます:フォーム送信 OK。

次に、ソース コードを見て、スクリプトによって生成されたトークンを別のサーバー (domain2.com) にコピーし、そこで偽の HTML フォームを作成しようとします。

<form action="http://domain1.com/demo.php" method="POST">
<input type="hidden" value="1356266422:QaAnM2IolCk9K1Mme3rOGifwmfmdldzdyg/PBu4ht818lIu52ArKFG2HxUOztmcgwblLcIgymaNheuGY7g6Kg==:nvhnqxfM9upP/UT+FRGf0nXDILFPHaubfdjahVYSm2w9fFHKQ/bQQ6rapjdKN8ype9qaX8TkAZJpxg9RmH8ZM9YWA==" name="_token">
<input type="submit" value="Submit">
</form>

domain2.php から「送信」ボタンを押すと...驚くべきことに、最初のサーバー (domain1.com) の demo.php は、それ自体と同じようにトークンを処理し、同じ文字列を表示します:フォーム送信 OK。

Token INVALID.」であってはいけません 同じサーバーから送信されていない場合に出てきますか? どこで私は間違えましたか?ありがとう!

4

2 に答える 2

1

「Token INVALID」であってはなりません。同じサーバーから送信されていない場合に出てきますか?

いいえ。

トークンのポイントは、Mallory (悪意のあるサーバーを制御している) が Alice の Web ブラウザーに不正なデータを Bob の Web サーバーに送信させないようにすることです。

この場合、Alice はリクエストの送信元のサーバーを制御します。Alice は信頼されており、トークンにアクセスできます。

アリスは好きなリクエストをすることができます。

次に、ソースコードを確認します

マロリーにはそれができません。彼女はトークンを取得する方法がないため、アリスがマロリーが望んでいる要求を行っていないことをだますことはできません。

于 2012-12-23T13:06:22.690 に答える
0

CSRFは、疑いを持たないユーザーがサーバーにログインし、ユーザーの意図なしにサーバー上で特定のアクションを実行するように強制するという事実を使用して、サードパーティのサーバーからサーバーにフォームデータを送信することです。

CSRFトークンは、各フォームで有効なトークンを送信する必要があるため、これを防ぎます。サードパーティは、ユーザーの積極的な参加なしにこれらのトークンを取得することはできません。そのため、サードパーティは自分のサイトからあなたのサイトへのフォーム送信を「偽造」できますが、有効なCSRFトークンを持っていないため、このような偽のリクエストを実際のリクエストと区別するのに役立ちます。ブラウザのJavascriptクロスサイトスクリプティングルールにより、ブラウザがサードパーティサイトからデータをフェッチできないため、サードパーティはそのようなトークンを取得できません(ただし、サードパーティサイトへのデータの送信は妨げられません

そのため、トークンをユーザーIDに関連付ける必要があります。サードパーティはサーバーから有効なトークンを取得て「偽の」フォームに含めることができる場合がありますが、ユーザー固有のトークンを取得することはできません。

サードパーティに明示的にトークンを与えると、独自のCSRF保護が破壊されます。

于 2012-12-31T15:03:04.790 に答える