1.CSRFとは
CSRF(クロスサイトリクエストフォージェリ)クロスサイトリクエストフォージェリ:攻撃者は、被害者にサードパーティのWebサイトに入るように誘導し、サードパーティのWebサイトの攻撃されたWebサイトにクロスサイトリクエストを送信します。被害者が攻撃されたWebサイトで取得した登録資格情報を使用して、バックグラウンドでのユーザー検証をバイパスし、攻撃されたWebサイトで操作を実行するようにユーザーになりすますという目的を達成します。
典型的なCSRF攻撃には、次のプロセスがあります。
- 被害者はa.comにログインし、ログイン資格情報(Cookie)を保持しました。
- 攻撃者は被害者を誘惑してb.comにアクセスしました。
- b.comはa.comにリクエストを送信しました:a.com/act=xx。ブラウザはデフォルトでa.comクッキーを運びます。
- a.comはリクエストを受信すると、リクエストを検証し、それが被害者の資格情報であることを確認します。これは、被害者から送信されたリクエストであると誤って考えます。
- a.comは被害者の名前でact = xxを実行しました。
- 攻撃が完了すると、攻撃者は被害者の知らないうちに被害者のふりをして、a.comに独自の定義された操作を実行させます。
2つ、いくつかの一般的なタイプの攻撃
1.GETタイプのCSRF
GETタイプのCSRFの使用は非常に簡単で、必要なHTTPリクエストは1つだけで、通常は次のように使用されます。
![](https://awps-assets.meituan.net/mit-x/blog-images-bundle-2018b/ff0cdbee.example/withdraw?amount=10000&for=hacker)
被害者がこのimgを含むページにアクセスすると、ブラウザは自動的にHTTPリクエストをhttp://bank.example/withdraw?account = xiaoming&amount = 10000&for = hackerに送信します。bank.exampleは、被害者のログイン情報を含むクロスドメインリクエストを受け取ります。
2.POSTタイプのCSRF
このタイプのCSRFは通常、次のような自動送信フォームを使用します。
<form action="http://bank.example/withdraw" method=POST>
<input type="hidden" name="account" value="xiaoming" />
<input type="hidden" name="amount" value="10000" />
<input type="hidden" name="for" value="hacker" />
</form>
<script> document.forms[0].submit(); </script>
このページにアクセスすると、フォームが自動的に送信されます。これは、POST操作を完了するためにユーザーをシミュレートするのと同じです。
POSTタイプの攻撃は通常、GETよりも少し厳しいですが、それでも複雑ではありません。個人のWebサイト、ブログ、またはハッカーによってアップロードされたWebサイトが、攻撃の原因である可能性があります。バックエンドインターフェイスはPOSTのみに依存することはできません。
3.リンクタイプCSRF
リンクタイプのCSRFは一般的ではありません。ユーザーがページを開いたときにユーザーが募集される他の2つの状況と比較すると、ユーザーはリンクをクリックしてトリガーする必要があります。このタイプは通常、フォーラムに投稿された写真に悪意のあるリンクを埋め込んだり、広告の形でユーザーを募集するように誘導したりします。攻撃者は通常、ユーザーをだまして次のような誇張された単語をクリックさせます。
<a href="http://test.com/csrf/withdraw.php?amount=1000&for=hacker" taget="_blank">
重磅消息!!
<a/>
ユーザーは以前に信頼できるWebサイトAにログインし、ログインステータスを保存しているため、ユーザーが上記のPHPページに積極的にアクセスしている限り、攻撃は成功します。
3つ目は、CSRFの特徴です。
- 攻撃は通常、攻撃されているWebサイトではなく、サードパーティのWebサイトで開始されます。攻撃されたWebサイトは、攻撃の発生を防ぐことはできません。
- 攻撃では、データを直接盗むのではなく、攻撃されたWebサイト上の被害者のログイン資格情報を使用して、被害者になりすまして操作を送信します。
- プロセス全体を通じて、攻撃者は被害者のログイン資格情報を取得できず、「不正使用」のみを取得できました。
- クロスサイトリクエストは、画像のURL、ハイパーリンク、CORS(クロスドメインリソース共有)、フォームの送信など、さまざまな方法で行うことができます。一部のリクエストメソッドは、追跡が難しいサードパーティのフォーラムや記事に直接埋め込むことができます。
CSRFは通常、クロスドメインです。これは、外部ドメインは通常、攻撃者による制御が容易だからです。しかし、写真やリンクを投稿できるフォーラムやコメントエリアなど、このドメインに使いやすい機能がある場合、攻撃はこのドメインの直下で実行される可能性があり、この種の攻撃はさらに危険です。