コンテンツへスキップ
uencoder

CSRF(クロスサイトリクエストフォージェリ)攻撃を防ぐ

CSRF は認証済みユーザーを騙して意図しないリクエストを送信させます。anti-CSRF トークン、SameSite Cookie、ダブルサブミットのパターンを学びましょう。

  1. 1

    CSRF は、ブラウザーが Cookie を自動送信する仕組みを悪用します。ユーザーがログイン済み(Cookie が存在)の状態で悪意あるサイトを訪れると、そのサイトはターゲットサイトにフォームを送信できます。Cookie は自動的に送られます。対策:(1) アンチ CSRF トークン(シンクロナイザーパターン)— フォームとセッションにランダムなトークンを入れ、送信時に検証。(2) SameSite Cookie — Cookie がクロスサイトで送信されない。(3) Origin/Referer ヘッダーの検証。(4) 状態を変更するリクエストにカスタムヘッダーを必須にする。

  2. 2
    HMAC ジェネレーター →

    アンチ CSRF トークンを生成します。トークンは、予測不可能(CSPRNG)、セッションごと(より高いセキュリティにはリクエストごと)、かつユーザーのセッションに紐付いているべきです。HMAC(session_id, random) が一般的なパターンです。決定論的(同じセッション → 同じトークン)ですが、シークレットなしでは偽造できません。

  3. 3
    ハッシュ計算ツール →

    ダブルサブミットパターンでは、ランダムなトークンを生成し、Cookie として設定し(JavaScript が読めるよう HttpOnly にしない)、毎リクエストのヘッダーに含めます。サーバーは Cookie とヘッダーが一致することを検証します。サーバー側の状態を必要としません。トークンのハッシュには SHA-256 を使ってください。

よくある質問

SameSite Cookie だけで CSRF を防げますか?
SameSite=Lax(最近のブラウザーの既定)は、トップレベルのナビゲーション(フォーム POST、リンクのクリック)に対する CSRF を防ぎますが、GET リクエストは許可します。SameSite=Strict はすべてのクロスサイト送信を防ぎますが、正当なクロスサイト利用(例:メールからあなたのサイトへのリンクをたどる)を壊します。多層防御のために SameSite=Lax + CSRF トークンを併用してください。
CSRF と XSS の違いは何ですか?
XSS は被害者のブラウザーで悪意あるコードを実行します(攻撃者がユーザーとしてデータを読み取り、操作を行います)。CSRF は被害者のブラウザーをだまして、認証済みサイトにリクエストを送らせます(攻撃者はレスポンスを読み取りません)。XSS はコードインジェクション、CSRF はリクエスト偽造です。XSS は CSRF 対策を回避できます(スクリプトがトークンを読めるため)。

このタスクを解決するワークフロー

コンテンツのハッシュと Base64 エンコード
入力のハッシュを計算し、コンパクトな転送のためにハッシュダイジェストを Base64 としてエンコードする。
パイプライン
テキストのハッシュと整合性検証
入力テキストのハッシュを計算し、期待されるハッシュと比較して整合性を検証する。
パイプライン
テキストのハッシュと CRC32 チェックサム検証
データ整合性検証のために、暗号学的 SHA-256 ハッシュと CRC32 チェックサムの両方を計算する。
パイプライン
HMAC 署名後に Base64 エンコード
HMAC 署名を生成し、API 認証ヘッダーのために Base64 エンコードする。
パイプライン
HMAC 署名と検証
メッセージの HMAC 署名を生成し、期待される署名と照合して検証する。
パイプライン
API リクエスト文字列の HMAC 署名
API 呼び出しを認証するために、リクエストペイロードの HMAC-SHA256 署名を生成する。
パイプライン
MD5 ハッシュ後に Base58 エンコード
MD5 ハッシュを計算し、コンパクトな表現のために Base58 としてエンコードする。
パイプライン
マルチハッシュ速度比較
入力をハッシュし、複数のハッシュアルゴリズムをベンチマークして速度と出力を比較する。
パイプライン
パスワード生成とハッシュ
ランダムパスワードを生成し、安全な保存のためにハッシュする。
パイプライン
SHA3-256 ハッシュと CRC32 チェックサム
SHA3-256 ハッシュを計算し、二重整合性検証のために CRC32 チェックサムを計算する。
パイプライン
SHA-512 ハッシュ後に Hex エンコード
SHA-512 ハッシュを計算し、可読性のために Hex としてエンコードする。
パイプライン
テキスト反転とハッシュ
テキストを反転し、その後反転結果の SHA-256 ハッシュを計算する。
パイプライン
テキストスクランブルとハッシュ
テキストをスクランブルし、その後スクランブル結果をハッシュする。
パイプライン

関連ツール