私はずっと前にCSRFについて聞いていましたが、ほとんどの場合、次のように聞いています。
CSRF攻撃から保護することは、誰かが(ボットなどを使用して)フォームを自動的に送信しないようにするために重要です。
ええと、それは100%真実ではありませんね。
私は約3年間ウェブスクレイピングを行ってきましたが、リクエストを作成し、フィールドを解析csrftokenmiddleware
して、他のフィールドと一緒にPOSTするのは非常に簡単です。
それで、それは本当に何のためですか?
私はずっと前にCSRFについて聞いていましたが、ほとんどの場合、次のように聞いています。
CSRF攻撃から保護することは、誰かが(ボットなどを使用して)フォームを自動的に送信しないようにするために重要です。
ええと、それは100%真実ではありませんね。
私は約3年間ウェブスクレイピングを行ってきましたが、リクエストを作成し、フィールドを解析csrftokenmiddleware
して、他のフィールドと一緒にPOSTするのは非常に簡単です。
それで、それは本当に何のためですか?
banking.example.com
次のフォームを使用して取引を送信する電子バンキング Web アプリケーションを想像してください。
<form action="/transaction" method="post">
<input type="text" name="beneficiary"/>
<input type="text" name="amount"/>
<input type="submit" value="Pay"/>
</form>
hacker.net
攻撃者は、次の Web サイトを設定できるようになりました。
<form action="https://banking.example.com/transaction" method="post" style="visibility:hidden">
<input type="text" name="beneficiary" value="John Doe, Account No. 34-236326-1"/>
<input type="text" name="amount" value="1000000"/>
<input type="submit" value="Pay"/>
</form>
<script>
document.forms[0].submit();
</script>
次に、攻撃者は被害者をだましてhacker.net
. これが機能するのは、被害者のブラウザーが、偽造された POST 要求と共にセッション Cookie を喜んで電子バンキング アプリケーションに送信するためです。フォームが CSRF トークンで保護されていた場合、攻撃者は被害者のブラウザに有効な POST リクエストを送信させることができなかったため、攻撃は不可能でした。
このタイプの攻撃は、クロスサイト リクエスト フォージェリ (CSRF) 攻撃と呼ばれます。
ちなみに、CSRF 攻撃は、電子バンキングやその他の重要な Web アプリケーションにログインしている間は、決して他の Web サイトにアクセスしないよう人々にアドバイスする理由でもあります。
CSRF トークンは、通常の承認されたユーザーによって自動的に送信される Web フォームを保護しません。それを防ぐには、CAPTCHAを使用します。