×
サイバー攻撃について

Django公式は、CSRFのReferer検証との競合を避けるため、外部リンク個別にrel="noreferrer"を使う方法を案内しています。


19. CSRF防御のよくある失敗

19-1. POSTだけトークンを確認する

PUT、PATCH、DELETEなども状態を変更します。

安全なメソッド以外はすべて検証対象にします。


19-2. トークンがある場合だけ検証する

次の実装は危険です。

if request.POST.get("csrf"):
    validate_csrf(request.POST["csrf"])

トークンを削除すれば検証自体が実行されません。

正しくは、トークンがない場合も拒否します。


19-3. 全利用者で共通のトークンを使う

環境変数や固定文字列をそのままフォームへ入れる方式は、1人から漏れると全利用者へ悪用されます。

# 危険
CSRF_TOKEN = "fixed-secret-token"

トークンをセッションまたは認証状態へ関連付けます。


19-4. 短いトークンや連番を使う

csrf=12345
csrf=user_1001
csrf=20260729

予測可能な値は防御になりません。

暗号学的に安全な乱数を使います。


19-5. CSRFトークンをURLへ入れる

https://example.com/update?csrf=SECRET