Content-Security-Policy sin romper tu sitio
Una CSP indica al navegador en qué orígenes de scripts, estilos e imágenes confiar. Es tu mejor defensa contra scripts inyectados y skimmers de tarjetas, y premia una implantación cuidadosa.
El código y la configuración se mantienen en inglés.
1. Empieza en modo de solo informe
El navegador informa de las infracciones en la consola, pero no bloquea nada.
add_header Content-Security-Policy-Report-Only "default-src 'self'; img-src 'self' data: https:; script-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'self'; object-src 'none'; base-uri 'self'" always;2. Navega por tu sitio y lee la consola
Abre DevTools → Console en tus páginas clave (inicio, un producto, el carrito y el pago, el formulario de contacto). Ahí aparece cada origen bloqueado. Añade los que sean de confianza, como https://www.googletagmanager.com o tu proveedor de pagos, a la directiva correspondiente.
3. Aplícala
Cuando la consola esté tranquila, cambia el nombre de la cabecera a Content-Security-Policy. Mantén la cabecera de solo informe a su lado mientras pruebas una versión más estricta.
Header always set Content-Security-Policy "default-src 'self'; img-src 'self' data: https:; script-src 'self' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; frame-ancestors 'self'; object-src 'none'; base-uri 'self'"Consejos para WordPress
- Muchos temas y plugins usan scripts en línea. Al principio puede que necesites
'unsafe-inline'enscript-src. Es más débil, peroframe-ancestors,object-srcybase-urisiguen ayudando. - Para una política estricta, usa nonces: WordPress 5.7+ puede añadir atributos a los scripts impresos con
wp_print_inline_script_tag(). - Pon primero una CSP estricta en tu pago, donde más importa.
Directivas útiles
frame-ancestors 'self': el sustituto moderno de X-Frame-Options.upgrade-insecure-requests: actualiza automáticamente los recursos http:// a https://.connect-src: limita adónde pueden enviar datos los scripts, algo útil contra los skimmers.