Endebut Catch

// SECURITY

セキュリティ対策

最終更新日:2026年5月23日

Endebut Catch は、利用者の個人情報とプライバシーを最優先に設計しています。 以下は当サービスが実装している技術的セキュリティ対策の一覧です。

🔐

1. プライバシー by Design

構造的にリスクを抑える設計

応募者と主催者の連絡先情報の取扱いを以下のように設計し、情報漏洩リスクを構造的に低減しています。

  • 応募者のプロフィール連絡先フィールドを持たせない: 応募者プロフィールには電話・LINE・別メール等の連絡先フィールドが表示されず、登録できません。 アプリケーション層で role 判定により強制的に null 化されるため、データベースにも保存されません。
  • サインイン用メールアドレスのみ Supabase Auth に保管: ログイン認証に必要な認証用メールアドレスは Supabase Auth で暗号化保管されますが、 他ユーザー(主催者を含む)には一切開示されません
  • サイト内チャット機能で連絡可能: 主催者との連絡はサイト内チャットで行うため、応募者は個人連絡先を晒すことなくやり取りできます。 面談時に当事者間で直接連絡先を交換し、以降は直接連絡が可能になります(後述「7. サイト内チャット機能」参照)。
  • 未成年応募者の保護者連絡先: 18歳未満の応募者については保護者の連絡先(氏名・続柄・連絡先)を登録必須としており、 当社データベースに非公開で保管します。 他のユーザー(主催者を含む)には開示されず、運営のみが緊急時に確認します。
🔒

2. 通信・転送のセキュリティ

ネットワーク層の保護

  • HTTPS / TLS 1.3 強制: 全通信を業界標準の暗号化通信で保護
  • HSTS (Strict-Transport-Security): max-age=63072000 / includeSubDomains / preload 対応
  • upgrade-insecure-requests: CSP により全リソースを HTTPS にアップグレード
🛡️

3. 認証・認可

ユーザー境界の強制

  • PostgreSQL 行レベルセキュリティ (RLS): データベース層でユーザーごとのアクセス境界を強制。アプリケーション層をバイパスされても保護される
  • パスワードのハッシュ保管: Supabase Auth により bcrypt 系で保管。ハッシュ化前の値は保持しません
  • パスワード強度の強制: 10文字以上 + 大文字 / 小文字 / 数字 / 記号 のうち3カテゴリ以上を必須化。よくある弱パスワードはブロック
  • セッション管理: HttpOnly / Secure / SameSite クッキーで管理
🚧

4. ウェブ攻撃対策

XSS / CSRF / クリックジャッキング

  • Content-Security-Policy (CSP): nonce ベースで動的に生成。default-src 'self' をベースに、 許可ドメインを最小限に絞ったホワイトリスト方式
  • X-Frame-Options: DENY: iframe 埋め込みを全面禁止(クリックジャッキング対策)
  • X-Content-Type-Options: nosniff: MIME sniffing を禁止
  • Referrer-Policy: strict-origin-when-cross-origin: 他サイトへのリファラ情報漏洩を抑制
  • Permissions-Policy: camera / microphone / geolocation / payment / usb 等を全面無効化
  • React / Next.js のデフォルト XSS 対策: JSX の自動エスケープ、メールテンプレートは独自 escapeHtml で保護
🚦

5. レート制限・スパム対策

不正大量送信のブロック

  • API レート制限:/api/contact 等で IP 単位の送信回数制限(10分間に5回まで)
  • フィールド長制限: 本文最大 5000 文字、件名 200 文字等で DoS / 巨大ペイロード攻撃を防止
  • メアド形式検証: RFC 準拠の正規表現で不正形式をブロック
📁

6. ファイルアップロードの安全性

拡張子偽装・容量攻撃の対策

  • マジックバイト検証: ファイル先頭バイトでMIMEタイプを判定し、拡張子偽装をブロック
  • サイズ制限: 画像 10MB / 動画・音声 100MB
  • 再生時間制限: 動画・音声は5分以内
  • Supabase Storage RLS: アップロード先フォルダを {user_id}/ に強制
📋

7. 監査ログ・不正検知

重要操作の追跡

  • セキュリティイベントログ: スカウト送信・承諾・辞退、メッセージ送信等を記録
  • IP ハッシュ化: ブルートフォース検知用にIPはSHA-256ハッシュで保管(個人特定不可)
  • 管理者操作の監査: ユーザー停止・解除・通報対応等の管理者操作を audit_logs に記録
  • RLS で閲覧制限: ログは管理者のみ閲覧可
🔑

8. シークレット管理

API キー・機密値の保護

  • サーバー専用環境変数:SUPABASE_SERVICE_ROLE_KEY /RESEND_API_KEY 等はクライアントへ露出しません
  • クライアント露出キーの最小化: フロントエンドが利用するのは Supabase Anonymous Key のみ(RLS で保護)
  • .env ファイルの除外: .gitignore により認証情報を含むファイルはコミットされません
🏗️

9. インフラ・運用

クラウド基盤と更新ポリシー

  • ホスティング: Vercel(SOC 2 Type 2 / ISO 27001 認証取得済み)
  • データベース: Supabase / PostgreSQL(自動バックアップ・暗号化保存)
  • 依存ライブラリの監視: GitHub Dependabot による脆弱性アラート
  • 定期的なセキュリティアップデート: Next.js / Supabase SDK 等を最新の安定版に追随
🚨

10. インシデント対応

万一の場合の連絡先

セキュリティ上の脆弱性を発見された場合は、公開せず以下までご連絡ください。 責任ある開示にご協力いただいた方には、可能な範囲で謝意を表します。

連絡先: info@endebut-catch.jp

本ページに記載の対策は、現時点での実装内容に基づきます。 サービスのアップデートにより内容は変更される場合があります。

関連: プライバシーポリシー / 利用規約