クロスサイトリクエストフォージェリとは何ですか?

CSRFまたはクロスサイトリクエストフォージェリは、攻撃者が別のWebサイトでの被害者のセッションでアクションを発生させる可能性があるWebサイトの脆弱性です。 CSRFを非常にリスクの高いものにしていることの1つは、ユーザーの操作さえ必要としないことです。必要なのは、被害者がエクスプロイトを含むWebページを表示することだけです。

ヒント:CSRFは通常、文字ごとまたは「シーサーフ」と発音されます。

CSRF攻撃はどのように機能しますか?

攻撃には、攻撃者が別のWebサイトで要求を行う方法を持つWebサイトを作成することが含まれます。 これには、ボタンを押すなどのユーザーインタラクションが必要になる場合がありますが、インタラクションがない場合もあります。 JavaScriptには、アクションを自動的に発生させる方法があります。 たとえば、0 x 0ピクセルの画像はユーザーには表示されませんが、その「src」が別のウェブサイトにリクエストを送信するように設定できます。

JavaScriptはクライアント側の言語です。つまり、JavaScriptコードはWebサーバーではなくブラウザーで実行されます。 この事実のおかげで、CSRFリクエストを行うコンピューターは実際には被害者のコンピューターです。 残念ながら、これは、ユーザーが持っているすべての権限でリクエストが行われることを意味します。 攻撃しているWebサイトが被害者をだましてCSRFリクエストを作成すると、そのリクエストは、通常のリクエストを行っているユーザーと本質的に区別できなくなります。

CSRFは、Webブラウザーに対する「混乱した副攻撃」の例です。ブラウザーは、攻撃者によってそれらの特権を持たない攻撃者によってその許可を使用するように騙されます。 これらの権限は、ターゲットWebサイトへのセッションおよび認証トークンです。 ブラウザは、リクエストにこれらの詳細を自動的に含めます。

CSRF攻撃は、調整がやや複雑です。 まず、ターゲットWebサイトには、アカウントの削除などの副作用があるフォームまたはURLが必要です。 次に、攻撃者は目的のアクションを実行するためのリクエストを作成する必要があります。 最後に、攻撃者は、標的のWebサイトにサインインしているときに、エクスプロイトを含むWebページを被害者にロードさせる必要があります。

CSRFの問題を防ぐためにできる最善のことは、CSRFトークンを含めることです。 CSRFトークンは、Cookieとして設定されるランダムに生成された文字列であり、値を含むリクエストヘッダーとともに、すべての応答に値を含める必要があります。 CSRF攻撃にはCookieを含めることができますが、ヘッダーを設定するためのCSRFトークンの値を判別する方法がないため、攻撃は拒否されます。