Encabezados HSTS y de seguridad para su sitio web
Con cada página, su servidor web envía cabeceras: líneas breves con instrucciones para el navegador. Determinan en parte con qué nivel de seguridad el navegador gestiona su sitio. A continuación le explicamos qué es HSTS, qué otras cabeceras de seguridad existen y cómo configurarlas y probarlas.
Primero, su sitio debe tener un certificado funcionando y redirigir a los visitantes a https. Puede leer sobre esto en Activar, renovar y solucionar problemas del certificado SSL y Redirigir obligatoriamente a los visitantes a https.
¿Qué hace HSTS?
Redirigir a https tiene un momento débil: la primera solicitud a través de http todavía va sin cifrar. Alguien en la misma red, por ejemplo en una wifi pública, puede interceptar esa solicitud. HSTS (HTTP Strict Transport Security) resuelve esto. Su sitio envía esta cabecera a través de https:
Strict-Transport-Security: max-age=31536000
El navegador recuerda entonces que solo puede abrir su sitio a través de https. Si un visitante escribe más tarde http://, el navegador lo convierte él mismo en https, incluso antes de que algo pase por la red. Una cabecera HSTS que llega a través de http normal es ignorada por el navegador.
| Elemento | Significado |
|---|---|
max-age | Cuánto tiempo lo recuerda el navegador, en segundos. La prueba de internet.nl considera al menos un año (31536000) como suficiente. |
includeSubDomains | También se aplica a todos los subdominios, como shop.sudominio.nl y mail.sudominio.nl. |
preload | Solicita la inclusión en la lista integrada en los navegadores (hstspreload.org). Así, incluso la primera visita queda protegida. Para ello se necesitan, entre otras cosas, un año, includeSubDomains y https en todos los subdominios. Darse de baja lleva mucho tiempo. |
max-age=0 | Borra la instrucción recordada en la siguiente visita a través de https. |
includeSubDomains, esto también se aplica a cada subdominio, como una antigua página de cámara o impresora sin certificado. Por eso, constrúyalo gradualmente: comience con un max-age corto, por ejemplo un día (86400), compruebe que todo funciona y auméntelo paso a paso hasta un año.El interruptor de HSTS en DirectAdmin
En DirectAdmin, vaya a Domains y haga clic en el nombre de su dominio. Si Secure SSL Connection está activado, verá en HSTS el interruptor Enable HTTP Strict Transport Security. Después haga clic en Save para guardar. Puede leer el procedimiento paso a paso en Redirigir siempre a los visitantes a https.
Si quiere saber qué max-age envía su sitio, consulte las herramientas de desarrollador de su navegador o la prueba de internet.nl (vea más abajo). Configure HSTS en un único lugar: en DirectAdmin o en .htaccess, no en ambos. Si el navegador recibe dos cabeceras HSTS, solo utilizará la primera.
Las otras cabeceras de seguridad
| Cabecera | Contra qué protege | Valor para empezar |
|---|---|---|
X-Content-Type-Options | El navegador intenta adivinar por sí mismo qué tipo de archivo es, de modo que una "imagen" subida puede ejecutarse como script. | nosniff (el único valor válido) |
Content-Security-Policy: frame-ancestors o X-Frame-Options | Clickjacking: otro sitio carga su página de forma invisible dentro de un marco, de modo que los visitantes hacen clic en sus botones sin darse cuenta. | frame-ancestors 'self', o la cabecera más antigua X-Frame-Options: SAMEORIGIN |
Referrer-Policy | Al hacer clic hacia otro sitio, el navegador envía la dirección de la página anterior, a veces con un término de búsqueda o un número de pedido incluido. | strict-origin-when-cross-origin, o de forma más estricta same-origin o no-referrer. Internet.nl solo considera correctos los valores estrictos. |
Permissions-Policy | Determina qué funciones del navegador pueden utilizar su página y los marcos incrustados, como la cámara, el micrófono y la ubicación. | camera=(), microphone=(), geolocation=() desactiva esas tres funciones. Si su sitio utiliza alguna de ellas, omítala. |
Content-Security-Policy (completa) | Limita desde qué ubicaciones pueden cargarse scripts, estilos e imágenes. Esto dificulta mucho la inserción de scripts maliciosos (XSS). | Personalizada para cada sitio. Evite unsafe-inline, unsafe-eval y comodines. |
Configuración en .htaccess
Coloque estas líneas al principio del archivo .htaccess en la carpeta public_html de su dominio. Primero haga una copia del archivo.
<IfModule mod_headers.c> Header always set X-Content-Type-Options "nosniff" Header always set Content-Security-Policy "frame-ancestors 'self'" Header always set Referrer-Policy "strict-origin-when-cross-origin" Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()" # Solo si el interruptor de HSTS en DirectAdmin está desactivado: # Header always set Strict-Transport-Security "max-age=31536000" </IfModule>
Añada includeSubDomains solo cuando esté seguro de que todos los subdominios tienen https. Si utiliza WordPress, también puede configurar las cabeceras con un plugin. Elija un plugin conocido que siga recibiendo actualizaciones, y configure cada cabecera en un único lugar: en el plugin o en .htaccess.
Content-Security-Policy-Report-Only. Esta no bloquea nada, pero muestra en la consola del navegador qué se bloquearía. En caso de duda, déjelo en manos de su desarrollador web, o empiece únicamente con frame-ancestors.Pruebas
- Internet.nl: introduzca su dominio en la prueba de sitio web en internet.nl.
- Su navegador: abra su sitio, pulse F12 (o seleccione Inspeccionar), vaya a la pestaña Red (Network), recargue la página y haga clic en la primera solicitud. En Response Headers verá todo lo que envía su servidor.
- La línea de comandos:
curl -sI https://sudominio.nl/muestra las cabeceras.
Compruebe después de cada cambio que su sitio, los formularios y la página de pago sigan funcionando. Además, mantenga actualizados su CMS, sus plugins y sus temas. Consulte Proteger wp-login.php de WordPress.
Más información
- MDN: Strict-Transport-Security (en inglés)
- MDN: Content-Security-Policy (en inglés)
- MDN: Permissions-Policy (en inglés)
- Lista de precarga de HSTS (en inglés)
