セキュリティ上の注意
セルフホストで守ること。閲覧用ホストを分ける理由と、新規登録が誰でもできる現状への対処。
セルフホストでは、運用するあなたがセキュリティの設定に責任を持ちます。特に次の2点を確認してください。
閲覧用ホストを別にする
TrayPageのページ本文は、利用者やAIエージェントが書いた任意のHTMLです。スクリプトを含むこともあります。このHTMLがアプリと同じホスト(origin)から配信されると、ページ内のスクリプトがアプリのcookieやセッションに触れてしまうおそれがあります。
そのためTrayPageは、ページ本文をアプリとは別の閲覧用ホストから、権限を絞ったiframe(sandbox)の中で表示します。どの構成でも、ホスト名(ドメイン)を2つ用意してください。
| 設定 | 例 |
|---|---|
APP_ORIGIN | https://traypage.example.com |
VIEWER_ORIGIN | https://view.traypage.example.com |
守ること:
- 2つは別のホスト名にします。可能なら、別のドメインにすると、cookieの共有範囲からも切り離せます。
- 閲覧用ホストは、共有ページの本文しか返しません。閲覧用ホストにアプリの画面が表示される場合は、設定が誤っています。
- Cloudflareでは、カスタムドメインを設定したら
workers_devをfalseにします。workers.devのURLが残っていると、閲覧用ホストの分離を迂回できてしまいます。 - 閲覧用ホストが未設定の間(Cloudflareの初回デプロイ直後など)は、ページ本文がアプリと同じホストから配信されます。実際に使い始める前に、必ず設定してください。
新規登録は誰でもできる
現在のバージョンでは、メールのログインリンクを受け取れる人は誰でもアカウントを作れます。登録できる人を制限する機能はまだありません(今後のバージョンで、制限機能を追加する予定です)。
公開インターネットに置く場合は、知らない人がアカウントとワークスペースを作れる状態になることに注意してください。社内だけで使う場合は、次のようにアクセス元を絞ってください。
- Docker / VPS: ファイアウォールやVPNで、サーバーに届く通信を社内に絞る
- Cloudflare: Cloudflare Accessなどで、アプリ用ドメインへのアクセスを絞る
ただし、共有ページを社外の人に見せる使い方をする場合は、閲覧用ホストと共有ページのURLには外から届く必要があります。アクセス元を絞る範囲に注意してください。
ほかに確認すること
BETTER_AUTH_SECRETとVIEWER_TICKET_SECRETは、推測されない長い値にして、別々の値にします。リポジトリには入れないでください(Cloudflareはsecret、Dockerは.envに書き、.envはバージョン管理に入れません)。.envや秘密鍵のバックアップは、安全な場所に保管します。- 本番では、メールの受け口(Mailpit)を外します(
COMPOSE_PROFILESからmailpitを外す)。 - 更新を定期的に行います(Docker / VPS、Cloudflare)。