このドキュメントは、AIチャットボットアプリケーションに実装されているセキュリティ対策について説明します。
以下のHTTPセキュリティヘッダーが全てのレスポンスに自動的に付与されます:
- Strict-Transport-Security: HTTPS接続を強制
- X-Frame-Options: クリックジャッキング攻撃を防止
- X-Content-Type-Options: MIMEタイプスニッフィングを防止
- X-XSS-Protection: XSS攻撃を防止(レガシーブラウザ用)
- Referrer-Policy: リファラー情報の漏洩を制限
- Permissions-Policy: ブラウザ機能へのアクセスを制限
- Content-Security-Policy: 悪意のあるコンテンツの実行を防止
- オリジンチェックによる同一オリジンポリシーの強制
- カスタムヘッダー(X-Requested-With)による追加検証
- Zodスキーマによる厳格な入力値検証
- XSSパターンの検出と拒否
- HTMLエンティティのエスケープ処理
- メッセージ長の制限(最大5000文字)
3層のレート制限により、DoS攻撃とAPIの悪用を防止:
- 制限: 100リクエスト/分
- ブロック時間: 5分
- 制限: 30メッセージ/分
- ブロック時間: 2分
- 制限: 5セッション/時間
- ブロック時間: 30分
- UUID v4による予測不可能なセッションID
- 24時間の自動セッション期限切れ
- 期限切れセッションの自動クリーンアップ
- Prisma ORMによるSQLインジェクション対策
- パラメータ化されたクエリの使用
- 最小権限の原則に基づくアクセス制御
/lib/security/rate-limit.tsで各種制限値を調整できます:
const rateLimiterByIP = new RateLimiterMemory({
points: 100, // リクエスト数
duration: 60, // 期間(秒)
blockDuration: 60 * 5, // ブロック時間(秒)
})/lib/security/headers.tsでContent-Security-Policyを調整できます。
以下の環境変数が必須です:
ANTHROPIC_API_KEY: Anthropic APIキーMONGODB_URI: MongoDB接続文字列NEXT_PUBLIC_APP_URL: アプリケーションのURL
本番環境では以下も設定してください:
CRON_SECRET: Cronジョブ認証用シークレット
セキュリティ関連のテストは以下のコマンドで実行できます:
npm test __tests__/security/セキュリティインシデントが発生した場合:
- 影響を受けたセッションを特定
- 該当セッションを無効化
- ログを確認して攻撃パターンを分析
- 必要に応じてレート制限を強化
- OAuth認証の実装
- より詳細なログ記録
- WAF(Web Application Firewall)の導入
- セキュリティ監査の自動化