CSRF
クロスサイトリクエストフォージェリ
関連するエラー
「このサーバーにはクロスサイトリクエストフォージェリ攻撃に対する脆弱性があります。各リクエストにCSRFトークンまたはSameSiteクッキー属性を追加してください。」
問題
クロスサイトリクエストフォージェリ(CSRF)は、ユーザーが、認証されているアプリケーションに対するリクエストを意図せずに送信することを促す攻撃です。CSRF攻撃は、認証されたユーザーに対するウェブアプリケーションの信頼を悪用します。
多くの場合、CSRF攻撃は以下のようなソーシャルエンジニアリングを用いて対象を攻撃します。
フィッシングメール
チャットリンク
偽アラート
ユーザーがウェブアプリケーションにサインインすると、攻撃者は特定のウェブアプリケーションに対する不正なリクエストが含まれるURLをクリックするようにユーザーを促します。クリックすると、ユーザーのブラウザはこの悪意をもって細工されたリクエストを攻撃対象のウェブアプリケーションに送信します。これには、セッションクッキー、または保存された認証情報などのセッション情報が含まれます。ユーザーが攻撃対象のウェブアプリケーションでアクティブなセッションを実行している場合、アプリケーションはこの新しいリクエストを承認されたユーザーからのリクエストとして処理します。その結果、攻撃者によるウェブアプリケーションのCSRF脆弱性の悪用が可能になります。
攻撃のレベルは、被害者が持つ権限のレベルに応じて異なります。CSRF攻撃はユーザーのアイデンティティを直接盗み取りません。その代わりに、ユーザーを悪用してユーザーが意図しないアクションを実行します。
成功すると、CSRF攻撃はユーザーに以下のような状態変更リクエストの実行を強要します。
パスワードの変更
Eメールアドレスの変更
レコードの変更または削除
資金振込
購入
ソリューション
CSRF攻撃を阻止するには、以下を実行します。
すべての状態変更リクエストにCSRFトークンを使用する
CSRFトークン(同期トークンまたはチャレンジトークンとも呼ばれます)は、ユーザーセッションごとにクライアント側で生成される一意の秘密値であり、ユーザーをハックして欺くことを不可能にします。
セッションクッキーにSameSiteクッキー属性を使用する
CSRFトークンとともに、保護のさらなる強化手段としてクッキーにSameSite属性を設定します。SameSite属性は、クッキーとリクエストが同じドメインからのものである(かつクロスドメインからではない)場合にのみ、クッキーの送信を許可します。
注記
古いブラウザはSameSiteクッキーをサポートできない場合があります。