briefroom

新規登録 または ログイン

または

アカウントがない場合は自動的に作成されます。

セキュリティ

HTML と閲覧者を守る、briefroom のセキュリティ

配信ドメイン分離 + 3 段階 HTML 検査 + 認証権限 + プライバシー保護。安心して AI 生成 HTML を共有できる技術と運用の全てを、このページに集約しました。

4 つの安全保障

個人の企画書からクライアントワークまで、AI 生成 HTML を安心して共有するための土台。

  • 配信ドメイン物理分離

    ユーザーの HTML は本体ドメインとは別の user-content.briefroom.net から配信します。悪意ある HTML が実行されても、本体側の認証情報には触れられません。

  • HTML の 3 段階検査

    拡張子 allowlist + Magic byte 検証 + マルウェアスキャンで、危険な HTML を投稿時点で検知・遮断します。

  • 柔軟な閲覧制限

    共有URLは検索で辿りつけないようトークン化し、パスワード保護 + メール招待制 + 期限プリセット (24h / 7 日、Pro 以上で 30 日 / 90 日 / 無期限) で、閲覧者を精緻にコントロールできます。

  • プライバシー保護

    個人情報は SHA-256 でハッシュ化して監査ログ管理。個人情報保護法 28 条の越境同意と即時削除権に対応しています。

セキュリティ設計の詳細

個別の対策を、実装レベルで俯瞰できるようまとめました。専門用語は最小限に、実際に効いている仕組みを平易に説明します。

配信ドメイン物理分離

共有 URL と配信 URL は別オリジンで運用されます。ブラウザの Same-Origin Policy によって、配信された HTML から本体側の Cookie や認証情報にはアクセスできません。

  • 共有 URL は briefroom.net、配信 URL は user-content.briefroom.net と origin レベルで分離
  • 配信 HTML は iframe に載せて Same-Origin Policy を適用
  • Public Suffix List への登録申請済み。異なる共有リンク間で Cookie を共有できない構造
  • 「本体ドメインから配信する変更は絶対に行わない」を絶対遵守の設計判断として明文化

HTML の 3 段階検査

アップロードされた HTML は、公開前に 3 層の検査を通過します。1 つでも危険が検知されれば、警告表示または公開停止へ自動で切り替わります。

Layer 1: ファイル形式検証

  • 拡張子 allowlist (.html / .css / .js / .svg / .png / .jpg / .gif / .woff(2) / .ttf / .otf / .json / .txt / .md 等) 以外は受け付けない
  • Magic byte 検証で拡張子詐称 (例: 実行ファイルを .png に偽装) を検知
  • SVG 内の script タグや onclick 系イベント属性を除去してサニタイズ
  • Zip 内のパス traversal (Zip Slip 攻撃) を検知して弾く

Layer 2: マルウェアスキャン

  • 外部マルウェアスキャン (VirusTotal API) で HTML と参照 URL をチェック
  • Clean = 即公開 / Flagged (1〜2 件検知) = 警告表示 + 公開継続 / Quarantined (3 件以上検知) = 公開停止 + 削除
  • EICAR テストファイルで検知フローの動作を継続的に検証

Layer 3: 定期再スキャン

  • Vercel Cron で 5 分間隔の再スキャン。新たに脅威判定が付いた HTML を後追いで検知
  • 判定結果の変化はすべて監査ログ (audit_logs) に記録

柔軟な閲覧制限

共有リンクの公開範囲は、用途に応じて 3 つのモードから選べます。期限切れや削除も、即時に配信側へ反映されます。

  • URL を知る人だけが見られる Unlisted モード (デフォルト)
  • パスワード保護モード (Pro / Team): ハッシュ化パスワード + HttpOnly Cookie で認証
  • メール招待制 (Pro / Team): Magic Link ログイン、招待外のアクセスは 401
  • 期限プリセット (24 時間 / 7 日 / 30 日) + 即時 revoke API
  • 失効時は 410 Gone を返し、CDN キャッシュも毎時 cron で purge

認証システム

ログインは Magic Link と Google OAuth の 2 経路。CLI からの利用も個別トークンで安全に扱えます。

  • Supabase Auth 上に構築 (Magic Link + Google OAuth)
  • CLI 用 Personal Access Token: 発行 / 失効 / 期限管理、OS の Keychain に暗号化保管
  • 全認証 Cookie は HttpOnly + Secure + SameSite=Lax
  • 秘密鍵は Vercel の Sensitive フラグ ON、配信 Worker 側の Secret は別途分離管理
  • ゲストデプロイ / 招待者ログイン / パスワード試行 / コメント投稿で Cloudflare Turnstile による bot 検知

プライバシー保護

個人情報は「そもそも持たない」を原則に、必要最小限だけを匿名化して扱います。誤って公開した HTML の削除依頼にも対応します。

  • IP アドレスは SHA-256 でハッシュ化してから保存
  • メールアドレスはユーザーテーブルと監査ログのメタデータにのみ保持、ログや Sentry には出さない
  • 共有 URL の生トークンは DB に保存せず、SHA-256 ハッシュだけで管理
  • 越境移転先 (Cloudflare / Supabase / Resend / Stripe 等) は個人情報保護法 28 条の同意チェックで明示
  • ダッシュボードから即時削除リクエスト可 → R2 + DB + CDN キャッシュを全て purge
  • VirusTotal に誤って上げた HTML は撤回リクエスト経路をご案内します

監視・インシデント対応

サービスの稼働状況とセキュリティイベントは常時監視。24 時間以内の初動対応をコミットしています。

  • Sentry でエラー / 例外を即時通知
  • Better Stack Monitor で 4 エンドポイントを 5 分間隔監視
  • Vercel Analytics でリクエスト量 / レイテンシ / 地域分布を把握
  • 違反通報フォーム (Turnstile + レート制限 + メール通知)
  • /.well-known/security.txt で脆弱性報告先を公開
  • 削除リクエストは 24 時間以内に対応、削除履歴は監査ログに保存

コンプライアンス

国内 SaaS として最低限おさえるべき法的枠組みを整備しています。

  • 利用規約 + プライバシーポリシー
  • 特定商取引法に基づく表記 (適格請求書事業者番号記載)
  • 適格請求書 (インボイス) 発行事業者として登録
  • サイバー保険の導入を検討

よくある質問

HTML に悪意ある JavaScript が含まれていた場合はどうなりますか?
拡張子 allowlist + Magic byte 検証 + マルウェアスキャンの 3 段階検査で、投稿時点でほとんどのケースを遮断します。仮に検知をすり抜けても、配信ドメインが本体と分離されているため、認証情報や Cookie が盗まれることはありません。
アカウントが漏洩したらどうすればよいですか?
Magic Link の再発行と CLI 用トークン (PAT) の全 revoke で、即座に古いセッションを無効化できます。お問い合わせフォームからご連絡いただければ、緊急対応いたします。
サービスが停止した場合の連絡手段は?
Better Stack Monitor による常時死活監視を行っています。障害情報の告知チャネル (公式アカウント / ステータスページ) は準備中で、近日対応予定です。
データはどこに保存されますか?
メタデータは Supabase (東京リージョン)、HTML 本体は Cloudflare R2 (US リージョン) に保存しています。詳細はプライバシーポリシーをご覧ください。
脆弱性を発見したら、どこに報告すればよいですか?
お問い合わせフォームからカテゴリ「セキュリティ・脆弱性の開示」を選択してご連絡ください。責任ある開示 (Responsible Disclosure) を歓迎します。/.well-known/security.txt にも同じ連絡先を掲載しています。

安心して始めるための入り口

設計思想を確認したうえで、安心して briefroom をお試しください。気になる点や違反コンテンツはいつでもご連絡いただけます。

セキュリティに関するお問い合わせ