Säkerhet och Content Security Policy
Vilka poster din Content Security Policy behöver för widgeten, varför den fungerar utan inbäddat skript och unsafe-inline, hur den isoleras från sidan och vilka hemligheter som aldrig hör hemma i webbläsaren.
Content Security Policy
Widgeten laddar inga tredjepartstypsnitt eller spårningspixlar och kör inte eval. Den anger sina stilar genom konstruktionsbara stilmallar (adoptedStyleSheets) i shadow DOM; de omfattas inte av style-src. Du behöver därför inget unsafe-inline och inget unsafe-eval.
Med adresserna till 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:;
Med egen domän:
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 enskilda posterna:
- script-src – platsen för
loader.js. Kärnan (core.<hash>.js) och modulerna som laddas senare (rundturer, integritetstext, butik) kommer också därifrån. - connect-src med wss:// – chattanslutningen.
- connect-src med https:// – samma adress en gång till: HTTP-reserven, offlineformuläret, filuppladdningar, integritetstexten och Smart Answer går via den. Om posten saknas märker du det först i nätverk utan WebSocket – där upprättas ingen anslutning alls.
- img-src – bilder i chatten: logotyp och avatarer (dina adresser med
https://eller bilder meddata:), bilder på reklamkortet och förhandsvisningar av bilagor (från chattadressen). Om du vill begränsaimg-srctar du med minst chattadressen och värdarna för logotypen och kortbilderna. Widgeten visar en blockerad bild som en filrad i stället för en förhandsvisning.
Äldre webbläsare utan konstruktionsbara stilmallar (som Safari före 16.4) faller tillbaka på ett <style>-element som en strikt style-src blockerar. Widgeten fungerar där, men utan formgivning.
Inget inbäddat skript behövs
Installationen består bara av en <script src> med attribut. Dina egna anrop (identify, track, open) hör hemma i egna skriptfiler eller i ett inbäddat skript med en nonce:
<script nonce="R4nd0mN0nc3">
ReactiveChat('identify', { userId: '4711', userHash: '…', exp: 1792503600 });
</script>
En mall utan inbäddat skript finns under Identifiera besökare.
Subresource Integrity
loader.js har inget versionsnummer i namnet och uppdateras löpande; ett integrity-attribut skulle stänga av chatten vid nästa uppdatering. Kärnan laddas med en innehållshash i namnet (Arkitektur). Om din policy kräver SRI distribuerar du loader.js själv och anger data-rc-ws-url (Snabbstart) – men då ansvarar du också för uppdateringarna.
Isolering från sidan
- Slutet shadow DOM. Dina stilar når inte widgeten och dess stilar når inte sidan – inte ens med globala återställningsregler.
- Inga cookies. Widgeten sätter inga cookies; ID:n finns i webbläsarens lagring, utan samtycke bara i
sessionStorage(Integrera integritetsskydd). - Ingen åtkomst till formulärfält. Sidtexten för assistenten läser aldrig inmatningsfält och körs inte alls på sidor som konto, kassa och varukorg. Du undantar ytterligare områden med
data-rc-private. - Personuppgifter maskeras två gånger: i webbläsaren innan ett meddelande skickas (kortnummer med Luhn-kontroll, IBAN, e-post, telefon, skattenummer) och på servern före lagring. Känsliga frågeparametrar (
email,password,token,key,card…) tas bort från överförda adresser. - Länkar och bilder från meddelanden och kort begränsas till
https://; länkar medjavascript:ochdata:slopas.
Ursprungskontroll
Chattanslutningen godtas bara från domänerna som listas i projektet under Tillåtna ursprung (inklusive underdomäner). En främmande sida som kopierar webbplatsnyckeln får origin_denied. Om listan är tom görs ingen kontroll – ange därför alltid dina domäner. Mer under Transport.
Själva webbplatsnyckeln är ingen hemlighet; den finns i varje sidas källkod.
Vad som aldrig hör hemma i webbläsaren
- identitetshemligheten (för
userHash) – Identitet - kunddataslutpunktens hemlighet
rckd_…– Kunddata - webhookens signeringshemlighet – Webhooks
- API-nycklar
rc_live_…– Server-API - proxynyckeln
rcpx_…– Egen domän
Inte heller i en app, ett offentligt kodarkiv eller en sidas adress.
Skydd mot missbruk
Servern begränsar anslutningar, ramar och meddelanden per anslutning och per adress och blockerar vid upprepade överträdelser (stängningskod 1008). Bakom egen proxy räknas det per besökaradress bara om proxynyckeln är korrekt – annars delar alla besökare proxyns adress. Siffror under Gränser och kvoter.
Nästa: Egen domän
Ìgbà àtúnṣe tó kẹ́yìn: