Las cabeceras de seguridad forman parte de la respuesta HTTP que envía tu servidor. Indican al navegador cómo tratar HTTPS, el framing, los tipos de contenido y reglas de endurecimiento similares.
En Pro, puedes activar muchas desde Security Ninja → Correcciones. También puedes configurarlas en .htaccess, Nginx o PHP. Las cabeceras mal configuradas (especialmente CSP) pueden romper el sitio, así que prueba tras cada cambio.
Strict Transport Security (HSTS)
HSTS indica a los navegadores que usen solo HTTPS. Confirma que tu certificado SSL funciona en todo el sitio antes de activarlo.
Ejemplo PHP (prefiere un tema hijo o plugin pequeño):
header( 'Strict-Transport-Security: max-age=31536000;' );
Apache (.htaccess):
#BEGIN WP Security Ninja - Forces only HTTPS
<IfModule mod_headers.c>
Header set Strict-Transport-Security "max-age=31536000;"
</IfModule>
#END WP Security Ninja - Forces only HTTPS
Añade includeSubDomains si quieres que la política cubra subdominios.
Nginx (bloque server):
add_header Strict-Transport-Security "max-age=31536000;";
Más información: https://hstspreload.org
Content Security Policy (CSP)
CSP limita qué fuentes puede cargar el navegador (scripts, estilos, frames y más). Reduce el impacto de XSS, pero una política estricta puede romper Analytics, incrustaciones y plugins.
Empieza con Content-Security-Policy-Report-Only mientras ajustas la política. Guía completa: Política de seguridad de contenido (CSP).
Ejemplo de política solo de informe que permite scripts del mismo origen:
#BEGIN WP Security Ninja - Only allow browsers to load.js files from this website
# Use Content-Security-Policy-Report-Only to test settings before using Content-Security-Policy.
<IfModule mod_headers.c>
Header set Content-Security-Policy-Report-Only: "script-src 'self'"
</IfModule>
#END WP Security Ninja - Only allow browsers to load.js files from this website
Nginx:
add_header Content-Security-Policy-Report-Only "script-src 'self'";
Security Ninja ya no establece la cabecera heredada X-XSS-Protection. Los navegadores modernos confían en defensas XSS integradas y CSP.
X-Frame-Options
Bloquea o limita incrustar tus páginas en iframes (defensa contra clickjacking).
Advertencia: Algunas vistas previas del personalizador de temas se rompen con esta cabecera.
header( 'X-Frame-Options: SAMEORIGIN' );
Apache:
#BEGIN WP Security Ninja - Prevent page-framing and click-jacking
<IfModule mod_headers.c>
Header always append X-Frame-Options SAMEORIGIN
</IfModule>
#END WP Security Ninja - Prevent page-framing and click-jacking
Los valores permitidos incluyen DENY, SAMEORIGIN y (heredado) ALLOW-FROM. Ten cuidado si tu propio sitio usa iframes.
Nginx:
add_header X-Frame-Options "SAMEORIGIN";
X-Content-Type-Options
X-Content-Type-Options: nosniff reduce ataques de MIME sniffing en los que un navegador trata una subida que no es script como contenido ejecutable.
Referrer-Policy
Controla cuántos datos de referrer envía el navegador en navegación y cargas cross-origin.
Security Ninja usa por defecto strict-origin-when-cross-origin en instalaciones nuevas y el asistente de configuración:
- Las peticiones same-origin siguen recibiendo la URL completa.
- Las peticiones HTTPS cross-origin reciben solo el origen.
- De HTTPS a HTTP no se envía nada.
Valores más estrictos como same-origin o no-referrer pueden romper incrustaciones como Google Maps o YouTube. Si las incrustaciones fallan tras activar cabeceras, comprueba Referrer-Policy primero. Los sitios existentes conservan su valor guardado.
header( 'Referrer-Policy: strict-origin-when-cross-origin' );
Apache:
#BEGIN WP Security Ninja - Set Referrer-Policy
<IfModule mod_headers.c>
Header set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>
#END WP Security Ninja - Set Referrer-Policy
Nginx:
add_header Referrer-Policy "strict-origin-when-cross-origin";
Si las incrustaciones de YouTube muestran Error 153, consulta Error 153 en incrustaciones de YouTube (documentación en inglés).
Permissions-Policy
Permissions-Policy (antes Feature-Policy) controla funciones del navegador como cámara, micrófono y geolocalización. La sintaxis difiere de la cabecera Feature-Policy antigua, así que revisa configuraciones anteriores.
Ejemplo:
header( 'Permissions-Policy: geolocation=(self "https://example.com"), microphone=()' );
Apache:
#BEGIN WP Security Ninja - Set Permissions-Policy
<IfModule mod_headers.c>
Header set Permissions-Policy "geolocation=(self \"https://example.com\"), microphone=() "
</IfModule>
#END WP Security Ninja - Set Permissions-Policy
Nginx:
add_header Permissions-Policy "geolocation=(self \"https://example.com\"), microphone=()";
Referencia: MDN Permissions-Policy.
Usar Security Ninja
Activa y ajusta cabeceras en Security Ninja → Correcciones, o empieza desde el asistente de instalación. Activa una cabecera cada vez y verifica que el front-end y la administración sigan funcionando.
