認証とアクセス制御
- すべてのAPIリクエストで Firebase IDトークンを検証 (
authenticateUser)
- サイト操作系エンドポイントでは
verifySiteOwnership を必ず通し、ユーザーIDとサイトIDの突合を実施
sanitizePath により ../ などのパストラバーサルを拒否
- 管理画面の許可ドメイン:
app.hirameki-web.com のみ(Firebase設定で管理)
ネットワークと暗号化
- HTTPS + TLS1.2以上。Let’s Encryptによる自動証明書
- Cloudflare / WAF でDDoS緩和
- 画像・メディアアップロードはサイズと拡張子でフィルタし、サーバー側で検証
データ保護
- PostgreSQLはVPCまたはlocalhostで稼働し、外部公開しない
.sitemeta.json に含まれるSEO/Analytics設定はユーザーごとに分離
- StripeやGemini等のAPIキーは
.env に保存し、backup-config.shで暗号化バックアップを取得
監査とログ
pm2 logs ai-web-builder-backend で不審なアクセスを定期確認
SECURITY_AUDIT.md のチェックリストに沿って四半期ごとにレビュー
- 異常検知時は
/api/chat の firebaseUid を必ずヘッダーから再取得し、リクエストボディから受け取らない
インシデント対応
- 影響範囲の特定(対象サイト/ユーザー)
- 該当APIキーの即時ローテーション
users / sites テーブルの監査ログをエクスポート
- Gravバックアップから復元し、再発防止策をドキュメント化
チェックリスト