Sicurezza e Content Security Policy
Quali voci servono nella Content Security Policy per il widget, perché funziona senza script inline e senza unsafe-inline, come è isolato dalla Sua pagina e quali segreti non devono mai stare nel browser.
La Content Security Policy
Il widget non carica font di terze parti né pixel di tracciamento e non esegue eval. Imposta gli stili tramite fogli di stile costruibili (adoptedStyleSheets) nello shadow DOM; questi non rientrano in style-src. Non servono quindi né unsafe-inline né unsafe-eval.
Con gli indirizzi 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:;
Con un dominio personalizzato:
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:;
Le singole voci:
- script-src – la posizione di
loader.js. Anche il nucleo (core.<hash>.js) e i moduli caricati in seguito (tour, testo sulla privacy, negozio) provengono da lì. - connect-src con wss:// – la connessione della chat.
- connect-src con https:// – lo stesso indirizzo ancora una volta: vi passano il fallback HTTP, il modulo offline, i caricamenti di file, il testo sulla privacy e Smart Answer. Se manca questa voce, se ne accorge solo nelle reti senza WebSocket, dove non viene stabilita alcuna connessione.
- img-src – immagini nella chat: logo e avatar (i Suoi indirizzi
https://o immaginidata:), immagini della scheda promozionale e anteprime degli allegati (dall’indirizzo della chat). Se vuole restringereimg-src, includa almeno l’indirizzo della chat e gli host delle immagini del logo e delle schede. Il widget mostra un’immagine bloccata come riga di file anziché come anteprima.
I browser meno recenti senza fogli di stile costruibili (come Safari prima della 16.4) ripiegano su un elemento <style>, bloccato da uno style-src rigoroso. Il widget funziona, ma senza stili.
Nessuno script inline necessario
L’installazione consiste solo in un <script src> con attributi. Le Sue chiamate (identify, track, open) vanno nei Suoi file script oppure in uno script inline con un nonce:
<script nonce="R4nd0mN0nc3">
ReactiveChat('identify', { userId: '4711', userHash: '…', exp: 1792503600 });
</script>
Un modello senza script inline si trova in Identificare i visitatori.
Subresource Integrity
loader.js non ha un numero di versione nel nome e viene aggiornato continuamente; un attributo integrity interromperebbe la chat al prossimo aggiornamento. Il nucleo viene caricato con un hash del contenuto nel nome (Architettura). Se la Sua policy richiede SRI, distribuisca loader.js autonomamente e imposti data-rc-ws-url (Avvio rapido), ma in tal caso spetta a Lei anche aggiornarlo.
Isolamento dalla Sua pagina
- Shadow DOM chiuso. I Suoi stili non raggiungono il widget e i suoi stili non raggiungono la pagina, nemmeno con reset globali.
- Nessun cookie. Il widget non imposta cookie; gli ID rimangono nello spazio di archiviazione del browser, senza consenso solo in
sessionStorage(Integrazione della protezione dei dati). - Nessun accesso ai campi dei moduli. La lettura del testo della pagina per l’assistente non legge mai i campi di input e non viene eseguita su pagine come account, checkout e cart. Escluda altre aree con
data-rc-private. - I dati personali vengono mascherati due volte: nel browser prima dell’invio di un messaggio (numeri di carta con controllo di Luhn, IBAN, e-mail, telefono, codici fiscali) e sul server prima della memorizzazione. I parametri di query sensibili (
email,password,token,key,card…) vengono rimossi dagli indirizzi trasmessi. - Link e immagini da messaggi e schede sono limitati a
https://; i linkjavascript:edata:vengono scartati.
Verifica dell’origine
La connessione della chat viene accettata solo dai domini elencati nel progetto in Origini consentite (sottodomini inclusi). Una pagina esterna che copia la Sua chiave del sito riceve origin_denied. Se l’elenco è vuoto non viene eseguita alcuna verifica: inserisca quindi sempre i Suoi domini. Dettagli in Trasporto.
La chiave del sito non è un segreto: si trova nel sorgente di ogni pagina.
Che cosa non deve mai stare nel browser
- il segreto dell’identità (per
userHash) – Identità - il segreto dell’endpoint per i dati dei clienti
rckd_…– Dati dei clienti - il segreto di firma dei webhook – Webhook
- le chiavi API
rc_live_…– API server - la chiave del proxy
rcpx_…– Dominio personalizzato
Neppure in un’app, in un repository pubblico o nell’indirizzo di una pagina.
Protezione dagli abusi
Il server limita connessioni, trame e messaggi per connessione e per indirizzo e blocca in caso di violazioni ripetute (chiusura 1008). Dietro un Suo proxy conta per indirizzo del visitatore solo se la chiave del proxy è corretta; altrimenti tutti i visitatori condividono l’indirizzo del proxy. I valori si trovano in Limiti e quote.
Prosegua: Dominio personalizzato
Pēdējoreiz atjaunināts: