バンダイチャンネル不正アクセスから学ぶ:Django / django-allauthの退会・メール変更API対策

バンダイチャンネル不正アクセスから学ぶ:Django / django-allauthの退会・メール変更API対策
目次


2025年11月、バンダイチャンネルにて不正アクセスが発生し、会員の大量退会や会員情報の閲覧・取得の可能性が報告されました。 本記事では、この事件の概要と原因、およびDjango / django-allauthを用いた安全なWEBアプリケーション実装・退会処理の防護対策をまとめます。 ## 事件の概要と問題点 - **2025年11月6日**: 不正アクセスの疑いを公表、サービスを一時停止。 - **2025年11月6日夜**: 全サービス停止(緊急対応)。調査の結果、個人情報の一部が流出した可能性を否定できないと発表。 - **2025年12月19日**: サービス再開、利用料金の返金対応を実施。 - **2026年7月**: 15歳の少年がサイバー攻撃の疑いで逮捕(生成AIを使い会員を退会処理した疑い)。 攻撃者はログイン後の「重要操作(退会処理や情報閲覧)」を大量に自動実行した可能性があります。重要操作のAPIが十分に保護されていなかったことが大きな被害につながった可能性が高いと考えられます。 --- ## 危険な実装例(やってはいけないこと) 1. **user_id を信用してしまう(IDOR脆弱性)** `User.objects.get(id=request.POST['user_id']).delete()` のように他人のアカウントを操作される危険。 2. **GET で状態変更をしている** `GET /account/delete/` のようにリンクや画像の読み込みだけで実行される危険。 3. **CSRF 対策がない** `@csrf_exempt` などの使用により第三者サイトから勝手に実行される危険。 4. **再認証なしで重要操作を許可** ログインしていれば即実行できる状態でセッション盗用時に危険。 5. **レート制限がない** 短時間での大量退会・取得が可能になり攻撃の自動化を許してしまう。 --- ## 安全な実装のポイント(必ずやること) 1. **操作対象は必ず request.user を使う**: 他人の情報は操作させない。 2. **GET ではなく POST で実行**: `` + CSRFトークン。 3. **CSRF トークンを必ず検証**: 不正なリクエストをブロック。 4. **再認証(パスワード/MFA)を要求**: セッション盗用時の不正操作を防止。 5. **レート制限で大量実行を防止**: 短時間での連続リクエストを制御。 --- ## Django / allauth での具体的な対策 - **allauthの再認証を有効化**: `ACCOUNT_REAUTHENTICATION_REQUIRED = True` で直近認証(120秒以内)を要求。 - **allauthのレート制限を設定**: `ACCOUNT_RATE_LIMITS` でログインやパスワード変更の頻度を制限。 - **DRFのスロットリングを使う**: `ScopedRateThrottle` 等で重要APIごとに制限を分離。 - **退会は「予約制」にする**: 退会リクエスト後に確認メール送信&退会予約(24〜72h保持)を経て自動無効化。 - **監査ログを必ず記録**: 成功/失敗、IPアドレス、User-Agent、理由を記録しアラート通知。

図解:Django / django-allauthで重要操作APIを守る

公開情報に基づく重要操作APIの認可・再認証・復旧設計。

読んだ内容を10問練習と実技で確認

記事で理解した用語を、StudyQuestの演習とクラウド実技ラボで定着させます。

10問練習 実技ラボ

コメント(0件)

まだコメントはありません。最初のコメントを投稿してください!

コメントを投稿