web-dev-qa-db-ja.com

CSRFを実行するために同期トークンを盗むことができないのはなぜですか?

私はCSRFについて読んでいて、シンクロナイザトークンに遭遇しました。 CSRFを実行して実際のCSRFを実行するトークンを取得できない理由がわかりません。

例:bank.comhttps://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イメージを実行するのは困難ですが、実行可能ではありません。

11

悪意のあるサイトが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

18
user79537