Bezpieczeństwo i Content Security Policy
Jakich wpisów potrzebuje twoja Content Security Policy dla widżetu, dlaczego obywa się bez skryptu inline i bez unsafe-inline, jak jest odizolowany od twojej strony i jakie sekrety nigdy nie powinny trafić do przeglądarki.
Content Security Policy
Widżet nie ładuje obcych czcionek ani pikseli śledzących i nie wykonuje eval. Style ustawia przez konstruowalne arkusze stylów (adoptedStyleSheets) w shadow DOM; nie podlegają one style-src. Dlatego nie potrzebujesz unsafe-inline ani unsafe-eval.
Z adresami 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.deine-firma.de;
connect-src 'self' wss://chat.deine-firma.de https://chat.deine-firma.de;
img-src 'self' data: https:;
Poszczególne wpisy:
- script-src – miejsce, z którego pochodzi
loader.js. Stamtąd przychodzą też rdzeń (core.<hash>.js) i doładowywane moduły (przewodniki, tekst o ochronie danych, sklep). - connect-src z wss:// – połączenie czatu.
- connect-src z https:// – ten sam adres jeszcze raz: przez niego działają tryb awaryjny HTTP, formularz offline, przesyłanie plików, tekst o ochronie danych i Smart Answer. Jeśli brakuje tego wpisu, zauważysz to tylko w sieciach bez WebSocket – tam połączenie w ogóle nie dojdzie do skutku.
- img-src – obrazy w czacie: logo i awatary (twoje adresy
https://albo obrazydata:), obrazy karty promocyjnej i podglądy załączników (z adresu czatu). Jeśli chcesz zawęzićimg-src, uwzględnij co najmniej adres czatu i hosty obrazów logo i karty. Zablokowany obraz widżet pokazuje jako wiersz z plikiem zamiast podglądu.
Starsze przeglądarki bez konstruowalnych arkuszy stylów (np. Safari przed 16.4) przechodzą na element <style>, który ścisła style-src blokuje. Widżet działa tam, ale bez stylów.
Skrypt inline nie jest potrzebny
Osadzenie składa się tylko z jednego <script src> z atrybutami. Własne wywołania (identify, track, open) należą do twoich własnych plików skryptów albo do skryptu inline z nonce:
<script nonce="R4nd0mN0nc3">
ReactiveChat('identify', { userId: '4711', userHash: '…', exp: 1792503600 });
</script>
Wzór bez skryptu inline znajdziesz w Identyfikacji odwiedzających.
Subresource Integrity
loader.js nie ma numeru wersji w nazwie i jest stale aktualizowany; atrybut integrity unieruchomiłby czat przy następnej aktualizacji. Rdzeń jest doładowywany z hashem zawartości w nazwie (Architektura). Jeśli twoja polityka wymaga SRI, serwuj loader.js samodzielnie i ustaw data-rc-ws-url (Szybki start) – ale wtedy to ty odpowiadasz za aktualizacje.
Izolacja od twojej strony
- Zamknięty shadow DOM. Twoje style nie docierają do widżetu, jego style nie docierają do twojej strony – także przy globalnych resetach.
- Bez cookies. Widżet nie ustawia cookies; identyfikatory leżą w pamięci przeglądarki, bez zgody tylko w
sessionStorage(Ochrona danych). - Brak dostępu do pól formularzy. Tekst strony dla asystenta nigdy nie czyta pól wprowadzania i w ogóle nie działa na stronach takich jak konto, checkout i koszyk. Kolejne obszary wykluczasz przez
data-rc-private. - Dane osobowe są maskowane dwa razy: w przeglądarce, zanim wiadomość wyjdzie (numery kart z kontrolą Luhna, IBAN, e-mail, telefon, numery podatkowe), i na serwerze przed zapisaniem. Wrażliwe parametry query (
email,password,token,key,card…) są usuwane z przesyłanych adresów. - Linki i obrazy z wiadomości i kart są ograniczone do
https://; linkijavascript:idata:są odrzucane.
Kontrola pochodzenia
Połączenie czatu jest przyjmowane tylko z domen wpisanych w projekcie w polu Dozwolone źródła (łącznie z subdomenami). Obca strona, która skopiuje twój klucz witryny, dostaje origin_denied. Jeśli lista jest pusta, kontrola się nie odbywa – dlatego zawsze wpisuj swoje domeny. Szczegóły w Transporcie.
Sam klucz witryny nie jest sekretem; widnieje w kodzie źródłowym każdej strony.
Czego nigdy nie umieszczać w przeglądarce
- sekretu tożsamości (do
userHash) – Tożsamość - sekretu endpointu danych klientów
rckd_…– Dane klientów - sekretu podpisu webhooków – Webhooki
- kluczy API
rc_live_…– API serwera - klucza proxy
rcpx_…– Własna domena
Także nie w aplikacji, publicznym repozytorium ani w adresie strony.
Ochrona przed nadużyciami
Serwer ogranicza połączenia, ramki i wiadomości na połączenie i na adres, a przy powtarzających się naruszeniach blokuje (Close 1008). Za własnym proxy liczy według adresu odwiedzającego tylko wtedy, gdy klucz proxy się zgadza – w przeciwnym razie wszyscy odwiedzający dzielą adres proxy. Liczby w Limitach i kwotach.
Dalej: Własna domena
शेवटचे अद्यतन: