Skip to content

Security: sutefu23/ai-chat

Security

SECURITY.md

セキュリティ実装ドキュメント

概要

このドキュメントは、AIチャットボットアプリケーションに実装されているセキュリティ対策について説明します。

実装済みのセキュリティ対策

1. セキュリティヘッダー

以下のHTTPセキュリティヘッダーが全てのレスポンスに自動的に付与されます:

  • Strict-Transport-Security: HTTPS接続を強制
  • X-Frame-Options: クリックジャッキング攻撃を防止
  • X-Content-Type-Options: MIMEタイプスニッフィングを防止
  • X-XSS-Protection: XSS攻撃を防止(レガシーブラウザ用)
  • Referrer-Policy: リファラー情報の漏洩を制限
  • Permissions-Policy: ブラウザ機能へのアクセスを制限
  • Content-Security-Policy: 悪意のあるコンテンツの実行を防止

2. CSRF保護

  • オリジンチェックによる同一オリジンポリシーの強制
  • カスタムヘッダー(X-Requested-With)による追加検証

3. 入力値検証とサニタイゼーション

  • Zodスキーマによる厳格な入力値検証
  • XSSパターンの検出と拒否
  • HTMLエンティティのエスケープ処理
  • メッセージ長の制限(最大5000文字)

4. レート制限

3層のレート制限により、DoS攻撃とAPIの悪用を防止:

IP別レート制限

  • 制限: 100リクエスト/分
  • ブロック時間: 5分

セッション別レート制限

  • 制限: 30メッセージ/分
  • ブロック時間: 2分

新規セッション作成制限

  • 制限: 5セッション/時間
  • ブロック時間: 30分

5. セッション管理

  • UUID v4による予測不可能なセッションID
  • 24時間の自動セッション期限切れ
  • 期限切れセッションの自動クリーンアップ

6. データベースセキュリティ

  • Prisma ORMによるSQLインジェクション対策
  • パラメータ化されたクエリの使用
  • 最小権限の原則に基づくアクセス制御

セキュリティ設定のカスタマイズ

レート制限の調整

/lib/security/rate-limit.tsで各種制限値を調整できます:

const rateLimiterByIP = new RateLimiterMemory({
  points: 100, // リクエスト数
  duration: 60, // 期間(秒)
  blockDuration: 60 * 5, // ブロック時間(秒)
})

CSPポリシーの変更

/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/

インシデント対応

セキュリティインシデントが発生した場合:

  1. 影響を受けたセッションを特定
  2. 該当セッションを無効化
  3. ログを確認して攻撃パターンを分析
  4. 必要に応じてレート制限を強化

今後の改善点

  • OAuth認証の実装
  • より詳細なログ記録
  • WAF(Web Application Firewall)の導入
  • セキュリティ監査の自動化

There aren't any published security advisories