Seguridad y Content Security Policy
Qué entradas necesita su Content Security Policy para el widget, por qué funciona sin script en línea y sin unsafe-inline, cómo se aísla de su página y qué secretos nunca deben estar en el navegador.
La Content Security Policy
El widget no carga fuentes de terceros ni píxeles de seguimiento y no ejecuta eval. Establece sus estilos mediante hojas de estilo construibles (adoptedStyleSheets) en el shadow DOM; estas no están cubiertas por style-src. Por tanto, no necesita unsafe-inline ni unsafe-eval.
Con las direcciones de 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 propio:
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:;
Las entradas individuales:
- script-src: la ubicación de
loader.js. El núcleo (core.<hash>.js) y los módulos cargados después (recorridos, texto de privacidad, tienda) también proceden de allí. - connect-src con wss://: la conexión del chat.
- connect-src con https:// — la misma dirección de nuevo: por ella pasan la alternativa HTTP, el formulario sin conexión, las cargas de archivos, el texto de privacidad y Smart Answer. Si falta esta entrada, solo lo notará en redes sin WebSocket: allí no se establece ninguna conexión.
- img-src: imágenes del chat: logotipo y avatares (sus direcciones
https://o imágenesdata:), imágenes de la tarjeta promocional y vistas previas de archivos adjuntos (desde la dirección del chat). Si quiere restringirimg-src, incluya al menos la dirección del chat y los hosts de las imágenes de su logotipo y tarjeta. El widget muestra una imagen bloqueada como una línea de archivo en lugar de una vista previa.
Los navegadores antiguos sin hojas de estilo construibles (como Safari anterior a 16.4) recurren a un elemento <style>, que una directiva style-src estricta bloquea. El widget funciona en ellos, pero sin estilo.
No se necesita script en línea
La instalación consiste únicamente en un <script src> con atributos. Sus propias llamadas (identify, track, open) deben estar en sus propios archivos de script o en un script en línea con un nonce:
<script nonce="R4nd0mN0nc3">
ReactiveChat('identify', { userId: '4711', userHash: '…', exp: 1792503600 });
</script>
Encontrará una plantilla sin script en línea en Identificar visitantes.
Subresource Integrity
loader.js no tiene número de versión en el nombre y se actualiza continuamente; un atributo integrity dejaría el chat fuera de servicio en la siguiente actualización. El núcleo se carga con un hash de contenido en su nombre (Arquitectura). Si su política exige SRI, sirva loader.js usted mismo y establezca data-rc-ws-url (Inicio rápido); en ese caso, también será responsable de actualizarlo.
Aislamiento respecto a su página
- Shadow DOM cerrado. Sus estilos no llegan al widget y los del widget no llegan a su página, ni siquiera con restablecimientos globales.
- Sin cookies. El widget no establece cookies; los identificadores se guardan en el almacenamiento del navegador y, sin consentimiento, solo en
sessionStorage(Integración de privacidad). - Sin acceso a campos de formulario. La lectura del texto de página para el asistente nunca lee campos de entrada y no se ejecuta en páginas como cuenta, proceso de pago o carrito. Puede excluir más áreas con
data-rc-private. - Los datos personales se ocultan dos veces: en el navegador antes de enviar un mensaje (números de tarjeta con comprobación de Luhn, IBAN, correo electrónico, teléfono y números de identificación fiscal), y en el servidor antes de almacenarlos. Los parámetros de consulta sensibles (
email,password,token,key,card…) se eliminan de las direcciones transmitidas. - Los enlaces e imágenes de mensajes y tarjetas se restringen a
https://; los enlacesjavascript:ydata:se descartan.
Comprobación del origen
La conexión del chat solo se acepta desde los dominios indicados en el proyecto, en Orígenes permitidos (subdominios incluidos). Una página ajena que copie su clave del sitio recibe origin_denied. Si la lista está vacía, no se comprueba nada; por eso, introduzca siempre sus dominios. Más información en Transporte.
La propia clave del sitio no es un secreto; figura en el código fuente de todas las páginas.
Qué nunca debe estar en el navegador
- el secreto de identidad (para
userHash): Identidad - el secreto del endpoint de datos de clientes
rckd_…: Datos de clientes - el secreto de firma de webhooks: Webhooks
- las claves de API
rc_live_…: API de servidor - la clave de proxy
rcpx_…: Dominio propio
Tampoco en una aplicación, un repositorio público o la dirección de una página.
Protección contra abusos
El servidor limita conexiones, tramas y mensajes por conexión y por dirección, y bloquea las infracciones repetidas (cierre 1008). Detrás de su proxy propio, solo cuenta por dirección del visitante si la clave de proxy es correcta; de lo contrario, todos los visitantes comparten la dirección del proxy. Las cifras están en Límites y cuotas.
Siguiente: Dominio propio
最后更新: