Cuando un escáner te dice "Header faltante: HSTS" o "falta Content-Security-Policy", no está diciendo que te hackearon. Está diciendo que el servidor no le pide al navegador que active protecciones que ya trae incorporadas. Activarlas lleva minutos y cierra la puerta a varios ataques comunes.
Las cabeceras que importan
| Cabecera | Qué hace |
|---|---|
Strict-Transport-Security (HSTS) | Obliga al navegador a usar siempre HTTPS con tu dominio. |
Content-Security-Policy (CSP) | Define desde qué dominios se pueden cargar scripts, estilos e imágenes. Es la mejor defensa contra XSS. |
X-Frame-Options | Impide que otro sitio muestre el tuyo dentro de un iframe (clickjacking). |
X-Content-Type-Options | Evita que el navegador "adivine" el tipo de un archivo. |
Referrer-Policy | Controla cuánta información de tu URL se envía a otros sitios. |
Permissions-Policy | Desactiva APIs que no usás (cámara, micrófono, geolocalización). |
Apache o hosting compartido (.htaccess)
En la mayoría de los hostings (Hostinger, cPanel) podés agregarlas en el .htaccess de la raíz:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
</IfModule>
Nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
WordPress
Si no tenés acceso al servidor, podés hacerlo desde el functions.php de tu tema hijo:
add_action('send_headers', function () {
header('Strict-Transport-Security: max-age=31536000; includeSubDomains');
header('X-Frame-Options: SAMEORIGIN');
header('X-Content-Type-Options: nosniff');
header('Referrer-Policy: strict-origin-when-cross-origin');
});
CSP: empezá en modo "solo reporte"
La Content-Security-Policy es la más poderosa y la única que puede romper tu sitio si la configurás mal (por ejemplo, bloqueando Google Analytics o tu chat). Por eso conviene empezar con Content-Security-Policy-Report-Only: el navegador no bloquea nada, solo avisa en la consola qué bloquearía.
Header always set Content-Security-Policy-Report-Only "default-src 'self'; img-src 'self' data: https:; script-src 'self' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com"
Abrí tu sitio, mirá la consola del navegador (F12), agregá a la lista los dominios legítimos que aparezcan y, cuando ya no haya avisos, cambiá a Content-Security-Policy.
Antes de activar HSTS
- Asegurate de que todo el sitio y los subdominios funcionen con HTTPS. Con
includeSubDomains, un subdominio sin certificado deja de abrir. - Empezá con un
max-agecorto (por ejemplo300) y subilo a un año cuando confirmes que todo anda.
Cómo comprobarlo
En el navegador: F12 → pestaña Red → recargá → hacé clic en el documento principal → Encabezados de respuesta. Desde la terminal: curl -I https://tusitio.com.
Si querés ver el estado de tu sitio sin instalar nada, escaneá tu web gratis con CLIC404: revisa enlaces rotos, cabeceras de seguridad y SEO básico en un mismo reporte.
¿Querés saber cómo está tu sitio ahora mismo?
Escaneá tu web gratis: enlaces rotos, cabeceras de seguridad y SEO básico en un solo reporte.
Escanear mi sitio gratis