CSRFトークンとは何ですか?その重要性と仕組みは?質問する

CSRFトークンとは何ですか?その重要性と仕組みは?質問する

私はアプリケーション (たまたま Django) を作成していますが、"CSRF トークン" が実際に何であるか、そしてそれがどのようにデータを保護するかを知りたいだけです。

CSRF トークンを使用しない場合、投稿データは安全ではないのでしょうか?

ベストアンサー1

クロスサイトリクエストフォージェリ(CSRF)を簡単に説明すると

  • 現在、オンラインバンキングにログインしていると仮定します。www.mybank.com
  • からの送金により、mybank.com(概念的には)形式のリクエストが発生すると想定しますhttp://www.mybank.com/transfer?to=<SomeAccountnumber>;amount=<SomeAmount>。(口座番号はログイン時に暗示されるため、必要ありません。)
  • www.cute-cat-pictures.org悪質なサイトだとは知らずにアクセスしてしまいます。
  • そのサイトの所有者が上記のリクエストの形式を知っていて(簡単!)、あなたがログインしていることを正しく推測した場合(運が必要です!)、彼らは自分のページに(はケイマン諸島のアカウント番号で、 はあなたが以前持っていてよかったと思っていた金額です)mybank.comのようなリクエストを含めることができます。http://www.mybank.com/transfer?to=123456;amount=1000012345610000
  • そのページを取得したのでwww.cute-cat-pictures.orgブラウザがそのリクエストを実行します。
  • 銀行はこのリクエストの送信元を認識できません。Web ブラウザはリクエストを Cookie とともに送信しwww.mybank.com、完全に正当なものに見えます。あなたのお金が消えてしまいます。

これはCSRF トークンのない世界です。

次はCSRFトークンを使ったより良い方法です:

  • 転送要求は 3 番目の引数で拡張されます: http://www.mybank.com/transfer?to=123456;amount=10000;token=31415926535897932384626433832795028841971
  • このトークンは、推測不可能な巨大な乱数であり、mybank.comWeb サイトにそのページが表示されるときにそのページ上に表示されます。どのページを誰に提供する場合でも、そのたびに異なります。
  • 攻撃者はトークンを推測できず、Web ブラウザにトークンを引き渡すよう説得することもできません (ブラウザが正常に動作している場合)。そのため、間違ったトークン (またはトークンなし) を含むリクエストは によって拒否されるため、攻撃者は有効なリクエストを作成できませwww.mybank.com

結果:10000通貨単位は保持されます。

(あなたのマイレージは異なる場合があります。)

編集元一読の価値があるコメントによるソフェ:

www.cute-cat-pictures.orgHTTP アクセス制御のため、 のスクリプトは通常、 の CSRF 対策トークンにアクセスできないことに注意してください。この注意事項は、別の Web サイトから API を使用できないという理由だけで、目的を知らずにすべての Web サイト応答のwww.mybank.comヘッダーを不当に送信する一部の人にとって重要です。Access-Control-Allow-Origin: *

おすすめ記事