# Security Headers: cabeceras de seguridad y CSP para PrestaShop 8 y 9

> DataFirefly Security Headers envía las cabeceras de seguridad HTTP desde PrestaShop 8 y 9: Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy y Cross-Origin-Opener-Policy. El módulo se configura en Parámetros avanzados >…

- Página: <https://www.datafirefly.com/es/documentation/dfsecurityheaders/>
- Idioma: es
- Actualizado el: 2026-09-30
- Otros idiomas: [fr](https://www.datafirefly.com/documentation/dfsecurityheaders/index.md), [en](https://www.datafirefly.com/en/documentation/dfsecurityheaders/index.md), [de](https://www.datafirefly.com/de/documentation/dfsecurityheaders/index.md), [it](https://www.datafirefly.com/it/documentation/dfsecurityheaders/index.md), [pl](https://www.datafirefly.com/pl/documentation/dfsecurityheaders/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfsecurityheaders/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfsecurityheaders/index.md)
- Índice: <https://www.datafirefly.com/es/documentation/llms.txt>

DataFirefly Security Headers envía las cabeceras de seguridad HTTP desde PrestaShop 8 y 9: Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy y Cross-Origin-Opener-Policy. El módulo se configura en **Parámetros avanzados > Cabeceras de seguridad**, organizado en seis pestañas: Panel, General y modo de prueba, Content-Security-Policy, HSTS y otras cabeceras, Permissions-Policy e Infracciones CSP.

## Instalación

1. En **Módulos > Gestor de módulos**, haga clic en **Subir un módulo** y envíe el archivo ZIP.
2. El módulo se instala en modo de prueba, con la CSP en Report-Only y la recogida de infracciones activa: ningún visitante queda bloqueado.
3. Abra **Parámetros avanzados > Cabeceras de seguridad**. El enlace Configurar del gestor de módulos lleva al mismo sitio.

## Paso a producción, etapa por etapa

La lista **Paso a producción** del panel sigue estas etapas y muestra su estado.

1. **Declare sus dispositivos de prueba.** Pestaña General y modo de prueba: haga clic en **Añadir mi dirección IP**, o copie el enlace de prueba y ábralo en su teléfono.
2. **Marque los servicios que usa** en la pestaña Content-Security-Policy, bloque Servicios de terceros.
3. **Recorra la tienda** desde un dispositivo de prueba: inicio, categoría, ficha de producto, carrito, proceso de compra hasta el pago, cuenta de cliente. Las infracciones aparecen en la pestaña Infracciones CSP en pocos minutos.
4. **Trate las infracciones**: permita las fuentes legítimas e ignore las demás.
5. **Cambie la CSP a Aplicar** cuando no aparezca ninguna infracción nueva durante 24 horas.
6. **Haga clic en Vista previa de producción** en el panel para ver la nota sin modo de prueba y después **desactive el modo de prueba**.
7. **Compruebe en un escáner público** como securityheaders.com o Mozilla Observatory, tras vaciar la caché de su CDN si lo usa.

## El modo de prueba

Mientras el modo de prueba está activo, cada petición recibe uno de estos tratamientos:

- **Dispositivos de prueba** (IP de la lista o navegador abierto con el enlace de prueba): todas las cabeceras, CSP aplicada sea cual sea el modo elegido, HSTS limitado a 5 minutos y sin preload.
- **Otros visitantes**: solo la CSP en Report-Only, si la recogida de infracciones está activa. No se bloquea nada, pero sus navegadores informan de lo que se bloquearía.

Al desactivar el modo de prueba, todos los visitantes reciben la configuración completa.

La lista de IP acepta direcciones IPv4 e IPv6 y rangos CIDR, una por línea. El **enlace de prueba** marca el navegador que lo abre como dispositivo de prueba durante 24 horas, útil para un teléfono con 4G cuya IP cambia. Abra la misma dirección con `?dfsh_test=off` para parar antes. **Crear un nuevo enlace** invalida los enlaces anteriores.

La opción **Aplicar al back-office** envía HSTS, X-Frame-Options en SAMEORIGIN, X-Content-Type-Options y Referrer-Policy en el back-office. La CSP y Permissions-Policy nunca se aplican allí.

## Content-Security-Policy

### Directivas

Cada directiva acepta fuentes separadas por espacios o saltos de línea: palabras clave (`'self'`, `'none'`, `'unsafe-inline'`, `'unsafe-eval'`), hosts (`https://www.example.com`, `*.example.com`), esquemas (`data:`, `https:`), nonces y hashes. Las comillas de las palabras clave se añaden si faltan. Un valor no válido se descarta y se indica al guardar. Una directiva de carga vacía usa `default-src`; las demás directivas vacías no se envían.

### Servicios de terceros

Cada servicio marcado añade sus dominios a las directivas necesarias, sin tocar sus propias entradas: Google Analytics 4 y Tag Manager, Google Ads, Google Fonts, reCAPTCHA, Google Maps, YouTube, Vimeo, Meta Pixel, TikTok, Pinterest, Stripe, PayPal, Mollie, Cookiebot, Axeptio, Hotjar, Microsoft Clarity, Trustpilot y Crisp. Los proveedores cambian a veces sus dominios: revise la pestaña de infracciones tras activar un servicio.

### Opciones

- **Incluir los servidores de medios**: añade los servidores definidos en Parámetros avanzados > Rendimiento a las directivas de imágenes, scripts, estilos, fuentes y medios.
- **Actualizar las solicitudes inseguras**: envía `upgrade-insecure-requests` en modo Aplicar, en una tienda con https.
- **URL excluidas de la CSP**: un fragmento de URL por línea. La CSP no se envía cuando la dirección solicitada contiene uno de ellos, por ejemplo una página de retorno de pago problemática.

## Nonce y nota A+

La configuración por defecto mantiene `'unsafe-inline'` en `script-src`, porque los temas de PrestaShop usan scripts inline. Los escáneres limitan entonces la nota a A. Para aspirar a A+:

1. En el bloque **CSP estricta con nonce**, active **Añadir un nonce a los scripts** con el modo de prueba activo.
2. El módulo genera un nonce aleatorio en cada página, lo añade a todas las etiquetas `` y quita `'unsafe-inline'` de `script-src`.
3. Recorra la tienda y trate las infracciones. Los scripts insertados después por JavaScript sin nonce aparecen en el registro, por ejemplo las etiquetas HTML personalizadas de Google Tag Manager, que deben usar la variable nonce de GTM.
4. Cuando el registro ya no muestre infracciones `eval`, quite `'unsafe-eval'` de `script-src`.

La opción **Mantener los controladores de eventos inline** añade `script-src-attr 'unsafe-inline'` para que los atributos `onclick` sigan funcionando. Déjela activa salvo que su tema y sus módulos no los usen; algunos escáneres públicos la señalan.

Un módulo de caché de página completa guarda el HTML con el nonce del primer visitante, que ya no coincide con los siguientes. Excluya esas páginas de la caché o mantenga el nonce desactivado. La caché nativa de PrestaShop no se ve afectada.

Para desarrolladores: el nonce de la página está disponible en Smarty como `{$dfsh_nonce}` y en PHP con `DfSecurityHeaders::getNonce()`. Se añade automáticamente a las etiquetas script de la salida HTML; estos accesos sirven para código generado fuera de esa salida.

## Registro de infracciones

Los informes de los navegadores se agrupan por directiva y fuente bloqueada, con el número de ocurrencias, la fecha del último aviso, una página de ejemplo y, para el código inline, sus primeros caracteres. Las extensiones del navegador se ignoran. Las URL se guardan sin parámetros y no se conserva ninguna IP.

- **Permitir** añade la fuente a la directiva afectada. Si la directiva estaba vacía, primero toma las fuentes de `default-src`.
- **Ignorar** elimina la línea sin cambiar la CSP.
- Las casillas permiten **Permitir la selección** o **Ignorar la selección**. Los botones de directiva y el campo de búsqueda filtran la lista.

Permitir una infracción `inline` o `eval` añade `'unsafe-inline'` o `'unsafe-eval'`, lo que debilita la política: es mejor mover el script a un archivo. Con el nonce activo, los scripts inline sin nonce no pueden permitirse automáticamente. Las infracciones no vistas en 30 días se eliminan automáticamente.

## HSTS y otras cabeceras

- **HSTS**: duración de 5 minutos a 2 años, 1 año por defecto. Los navegadores recuerdan la cabecera durante todo ese tiempo y rechazan el http. `includeSubDomains` fuerza el https en todos los subdominios: actívelo solo si todos lo admiten. `preload` solo se envía con `includeSubDomains` y al menos 1 año; envíe el dominio a hstspreload.org solo si está seguro, salir de la lista tarda meses.
- **X-Frame-Options**: se recomienda SAMEORIGIN; DENY también bloquea los iframes de su propia tienda.
- **X-Content-Type-Options**: envía `nosniff`.
- **Referrer-Policy**: `strict-origin-when-cross-origin` por defecto.
- **Cross-Origin-Opener-Policy**: desactivada por defecto; `same-origin-allow-popups` mantiene operativas las ventanas de pago de PayPal.
- **Eliminar la cabecera X-Powered-By** oculta la versión de PHP que exponen algunos servidores.

## Permissions-Policy

Para cada una de las 19 funciones: **Bloqueado** la desactiva en todas partes, **Solo este sitio** la permite en su dominio y en los orígenes adicionales indicados, **Todos los sitios** la abre, **Sin definir** mantiene el comportamiento del navegador. Las funciones que una tienda no necesita (cámara, micrófono, geolocalización, sensores, USB...) están bloqueadas por defecto, y `payment` se limita al sitio. El servicio Stripe añade su propio origen a `payment`.

## Escáner y nota

**Analizar las cabeceras actuales** consulta una página de la tienda desde el servidor y muestra la nota, el detalle por cabecera, las fugas de información y las cabeceras sin procesar. Solo se pueden analizar los dominios de la tienda. **Vista previa de producción** simula la configuración sin modo de prueba. La nota sigue la misma ponderación que los escáneres públicos y es orientativa. El último análisis y el historial de notas siguen visibles tras recargar.

## Alertas de bloqueo

En la pestaña General y modo de prueba, active las **Alertas por email** e indique hasta 5 destinatarios. Con la CSP aplicada y el modo de prueba desactivado, cada recurso realmente bloqueado que nunca se había visto genera un email con la directiva, la fuente y la página. Las novedades se agrupan, como máximo un email por hora. **Enviar un email de prueba** verifica la configuración; si no llega nada, revise Parámetros avanzados > Email.

## Historial, exportación e importación

Cada cambio conserva los ajustes anteriores, con la fecha, el empleado y las diferencias con el estado actual. Se guardan las 15 últimas versiones; **Restaurar** vuelve a una de ellas, y el estado sustituido pasa al historial.

**Descargar los ajustes** genera un archivo JSON sin los tokens secretos, para importarlo en otra tienda, por ejemplo de preproducción a producción. Una importación siempre activa el modo de prueba. También se importan las IP de prueba: revíselas.

## Caché, CDN y cabeceras del servidor

- Un CDN o una caché de página puede servir cabeceras antiguas: vacíela tras cada cambio.
- Si su hosting o Cloudflare ya añade algunas cabeceras, el escáner señala los duplicados. Quítelas en el servidor o desactive la cabecera en el módulo.
- Para que el servidor gestione las cabeceras, copie el bloque Apache o Nginx del panel y desactive el módulo. El envío de infracciones y el nonce, que dependen del módulo, no se incluyen.

## Si algo falla

- **Una página ha dejado de funcionar**: restaure la versión anterior en el historial, o vuelva a poner la CSP en Report-Only mientras lo corrige.
- **Cortarlo todo**: desactive **Enviar las cabeceras de seguridad** en la pestaña General, o desactive el módulo.
- **HSTS**: un navegador que ha recibido HSTS rechaza el http hasta que caduca la duración, incluso tras desactivar el módulo. Por eso los dispositivos de prueba solo reciben 5 minutos.
