Beveiliging en Content Security Policy
Welke vermeldingen uw Content Security Policy voor de widget nodig heeft, waarom die zonder inline script en unsafe-inline werkt, hoe de widget van uw pagina is geïsoleerd en welke geheimen nooit in de browser thuishoren.
De Content Security Policy
De widget laadt geen lettertypen van derden, geen trackingpixel en voert geen eval uit. De stijlen worden ingesteld via constructable stylesheets (adoptedStyleSheets) in de shadow DOM; deze vallen niet onder style-src. U hebt daarom geen unsafe-inline en geen unsafe-eval nodig.
Met de adressen van 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:;
Met een eigen domein:
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:;
De afzonderlijke vermeldingen:
- script-src – de locatie van
loader.js. De kern (core.<hash>.js) en later geladen modules (tours, privacytekst, webwinkel) komen daar ook vandaan. - connect-src met wss:// – de chatverbinding.
- connect-src met https:// – hetzelfde adres nogmaals: de HTTP-fallback, het offlineformulier, bestandsuploads, de privacytekst en Smart Answer lopen erdoorheen. Als deze vermelding ontbreekt, merkt u dat pas in netwerken zonder WebSocket — daar komt dan helemaal geen verbinding tot stand.
- img-src – afbeeldingen in de chat: logo en avatars (uw adressen met
https://ofdata:-afbeeldingen), afbeeldingen van de promotiekaart en voorbeelden van bijlagen (vanaf het chatadres). Als uimg-srcwilt beperken, neem dan minstens het chatadres en de hosts van uw logo en kaartafbeeldingen op. De widget toont een geblokkeerde afbeelding als bestandsregel in plaats van als voorbeeld.
Oudere browsers zonder constructable stylesheets (zoals Safari vóór 16.4) vallen terug op een <style>-element, dat door een strikte style-src wordt geblokkeerd. De widget werkt daar, maar zonder opmaak.
Geen inline script nodig
De installatie bestaat alleen uit een <script src> met attributen. Uw eigen aanroepen (identify, track, open) horen in uw eigen scriptbestanden of in een inline script met een nonce:
<script nonce="R4nd0mN0nc3">
ReactiveChat('identify', { userId: '4711', userHash: '…', exp: 1792503600 });
</script>
Een sjabloon zonder inline script staat onder Bezoekers identificeren.
Subresource Integrity
loader.js heeft geen versienummer in de naam en wordt doorlopend bijgewerkt; een integrity-attribuut zou de chat bij de volgende update uitschakelen. De kern wordt geladen met een inhoudshash in de naam (Architectuur). Als uw beleid SRI vereist, bied loader.js dan zelf aan en stel data-rc-ws-url in (Snel aan de slag) — maar dan bent u ook zelf verantwoordelijk voor updates.
Isolatie van uw pagina
- Gesloten shadow DOM. Uw stijlen bereiken de widget niet en de stijlen van de widget bereiken uw pagina niet, ook niet met globale resets.
- Geen cookies. De widget plaatst geen cookies; ID's worden in de browseropslag bewaard, zonder toestemming alleen in
sessionStorage(Privacy-integratie). - Geen toegang tot formuliervelden. Het lezen van paginatekst voor de assistent leest nooit invoervelden en wordt helemaal niet uitgevoerd op pagina's zoals account, checkout en cart. Verdere gedeelten sluit u uit met
data-rc-private. - Persoonsgegevens worden tweemaal gemaskeerd: in de browser voordat een bericht wordt verstuurd (kaartnummers met Luhn-controle, IBAN, e-mail, telefoon, belastingnummers) en op de server vóór opslag. Gevoelige queryparameters (
email,password,token,key,card…) worden uit verstuurde adressen verwijderd. - Links en afbeeldingen uit berichten en kaarten zijn beperkt tot
https://; links metjavascript:endata:worden verworpen.
Origincontrole
De chatverbinding wordt alleen geaccepteerd vanaf de domeinen die in het project onder Toegestane origins staan (inclusief subdomeinen). Een externe pagina die uw sitesleutel kopieert, krijgt origin_denied. Als de lijst leeg is, vindt er geen controle plaats — vul daarom altijd uw domeinen in. Details onder Transport.
De sitesleutel zelf is geen geheim; die staat in de broncode van elke pagina.
Wat nooit in de browser thuishoort
- het identiteitsgeheim (voor
userHash) – Identiteit - het geheim van het klantgegevensendpoint
rckd_…– Klantgegevens - het ondertekeningsgeheim voor webhooks – Webhooks
- API-sleutels
rc_live_…– Server-API - de proxysleutel
rcpx_…– Eigen domein
Ook niet in een app, een openbare repository of het adres van een pagina.
Bescherming tegen misbruik
De server beperkt verbindingen, frames en berichten per verbinding en per adres en blokkeert bij herhaalde overtredingen (sluitcode 1008). Achter uw eigen proxy wordt alleen per bezoekersadres geteld als de proxysleutel correct is; anders delen alle bezoekers het adres van de proxy. Aantallen onder Limieten en quota.
Volgende: Eigen domein
Përditësuar së fundi: