私はCSRFについて読んでいて、シンクロナイザトークンに遭遇しました。 CSRFを実行して実際のCSRFを実行するトークンを取得できない理由がわかりません。
例:bank.com
はhttps://bank.com/transfer
で次のような形式になっています。
<form action="https://bank.com/do_transfer" method="post">
<input type="hidden" name="synchroniser_token" value="j/DcoJ2VZvr7vdf8CHKsvjdlDbmiizaOb5B8DMALg6s=" >
<input type="hidden" name="to" value="ciro">
<input type="hidden" name="amount" value="100">
<button type="submit">Send 100$ to Ciro.</button>
</form>
このコードは https://stackoverflow.com/a/26895980/1512962
malicioussite.com
がクライアントでJavaScriptを使用してhttps://bank.com/transfer
をGETし(すでにCookieに保存されているセッションIDを使用)、authenticity_token
のページを破棄しないようにする方法は何ですか?次に、そのIDを使用してrealCSRFを実行し、基本的にはCSRFが別のCSRFを実行します。
JavaScriptを実行する必要があるため、単純な0px X 0pxイメージを実行するのは困難ですが、実行可能ではありません。
悪意のあるサイトがCSRFトークンを取得できないのは、同一生成元ポリシーです。同一生成元ポリシー(SOP)はブラウザーレベルであり、JavaScriptが通信できる場所を定義します。
example.com
のJavaScriptは、example.org
を呼び出してデータを取得することはできません。また、ポートが異なるため、http://www.example.com/
のJavaScriptはhttp://www.example.com:8080/
を呼び出すことができません。設定されている他の制限があり、ここで見つけることができます: https://developer.mozilla.org/en-US/docs/Web/Security/Same-Origin_policy 。
Cross-Origin Resource Sharingには例外がありますが、ブラウザには従わなければならない独自のルールがあります。 CORSはここにあります: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS 。