セキュリティとContent Security Policy
必要なCSP項目、インラインスクリプトやunsafe-inlineなしで動く理由、ページからの隔離、ブラウザーに置いてはいけない秘密情報を説明します。
Content Security Policy
第三者フォント、トラッキングピクセルを読み込まず、evalも使いません。shadow DOMのconstructable stylesheets(adoptedStyleSheets)でスタイルを設定し、style-srcの対象外です。そのため、unsafe-inlineもunsafe-evalも不要です。
reactive.chatのアドレスの場合:
Content-Security-Policy:
script-src 'self' https://cdn.reactive.chat;
connect-src 'self' wss://ws.reactive.chat https://ws.reactive.chat;
img-src 'self' data: https:;
独自ドメインの場合:
Content-Security-Policy:
script-src 'self' https://chat.your-company.com;
connect-src 'self' wss://chat.your-company.com https://chat.your-company.com;
img-src 'self' data: https:;
各項目:
- script-src –
loader.jsの場所。コア(core.<hash>.js)や後からのモジュール(ツアー、プライバシーテキスト、ショップ)も同じ場所です。 - wss://を含むconnect-src – チャット接続。
- connect-src: https:// – 同じアドレスで、HTTPフォールバック、フォーム、アップロード、プライバシーテキスト、Smart Answerを処理します。なければ、WebSocketが使えないネットワークで初めて問題に気付き、そこでは一切接続できません。
- img-src – ロゴ、アバター(運営側の
https://アドレスやdata:画像)、カードの画像、添付プレビュー(チャットのアドレス)。img-srcを制限するなら、最低限チャット、ロゴ、カード画像のホストを含めます。ブロックされた画像はプレビューではなくファイルの行で表示します。
Safari 16.4より前などの古いブラウザーは、<style>にフォールバックし、厳格なstyle-srcがブロックします。動作しますが、スタイルなしになります。
インラインスクリプトは不要
導入は属性付き<script src>だけです。独自のidentify、track、openはスクリプトファイルか、nonce付きのインラインに置きます。
<script nonce="R4nd0mN0nc3">
ReactiveChat('identify', { userId: '4711', userHash: '…', exp: 1792503600 });
</script>
インラインなしのテンプレートは訪問者の本人確認にあります。
Subresource Integrity
loader.jsは名前にバージョンがなく継続更新されるため、integrityを付けると次の更新で停止します。コアは内容ハッシュ付きです(構成)。SRIが必須なら、loader.jsを自己配信し、data-rc-ws-urlを指定します(クイックスタート)。更新も自分で行ってください。
ページからの隔離
- 閉じたshadow DOM。 グローバルリセットでも、互いのスタイルは届きません。
- Cookieなし。 IDはブラウザーストレージ、同意なしでは
sessionStorageだけです(プライバシー)。 - フォーム欄にアクセスしません。 アシスタント用テキストは入力欄を読まず、アカウント、購入手続き、カートでは実行しません。さらに
data-rc-privateで除外できます。 - 個人データを2回マスク: 送信前のブラウザーでLuhn検査付きカード番号、IBAN、メール、電話、税番号を、保存前にサーバーでも処理します。アドレスの機密クエリ(
email、password、token、key、cardなど)も削除します。 - メッセージやカードのリンクと画像は
https://; に制限し、javascript:やdata:のリンクは破棄します。
オリジン検証
許可するオリジンのドメインからだけ接続を受け付け、サブドメインも含みます。第三者がサイトキーをコピーしてもorigin_deniedです。空一覧では検証しないため、必ず登録してください。通信参照。
サイトキー自体は、全ページのソースにあり、秘密情報ではありません。
ブラウザーに絶対に置かないもの
- 本人確認用シークレット(
userHash用) – 本人情報 - 顧客データエンドポイント用シークレット
rckd_…– 顧客データ - Webhook署名用シークレット – Webhook
- APIキー
rc_live_…– サーバーAPI - プロキシキー
rcpx_…– 独自ドメイン
アプリ、公開リポジトリ、ページのアドレスにも置かないでください。
不正利用対策
サーバーが、接続とアドレス単位で接続、フレーム、メッセージを制限し、繰り返すと1008でブロックします。独自プロキシでは、正しいキーがある場合だけ訪問者単位で数え、なければ全員がプロキシのアドレスを共有します。上限と利用枠参照。
次:独自ドメイン
最終更新: