Generalidades
Agregar encabezados de seguridad a su archivo .htaccess puede ayudar a proteger tu sitio web y sus datos. Este artículo explica cómo agregar los siguientes encabezados de seguridad.
Agregar un archivo .htaccess
Los ejemplos en este artículo asumen que tu sitio está en un servidor Apache y que está agregando encabezados al archivo .htaccess de tu sitio. Consulta el siguiente artículo para obtener una descripción general de qué es un archivo .htaccess y cómo agregar uno a tu sitio.
Content-Security-Policy
El encabezado Content-Security-Policy especifica las fuentes de contenido aprobadas que el navegador puede cargar desde tu sitio web. Cuando incluyes en la lista blanca fuentes de contenido aprobadas, ayudas a evitar que se cargue código malicioso en tu sitio. Esta es una forma de ayudar a reducir los riesgos de XSS.
Revisa la siguiente página para más detalles:
Este ejemplo permite que cualquier activo se cargue solo desde tu sitio web.
Header set Content-Security-Policy "default-src 'self'"
Este ejemplo permite que cualquier activo se cargue desde tu dominio a través de HTTPS solo en el puerto 443.
Header set Content-Security-Policy "default-src https://example.com:443"
Luego puedes probar si está activo corriendo el siguiente comando curl vía SSH:
[server]$ curl -I https://example.com HTTP/1.1 200 OK Date: Fri, 29 Mar 2024 22:17:47 GMT Server: Apache Last-Modified: Fri, 29 Mar 2024 17:05:19 GMT ETag: "2f5-56a72ed086011" Accept-Ranges: bytes Content-Length: 757 Content-Security-Policy: default-src https://example.com:443 Content-Type: text/html
Solución de advertencias de sitios inseguros y contenido mixto
Si tu sitio web tiene activos que se cargan a través de http, tu sitio mostrará una advertencia SSL en la barra de URL de tu navegador para notificar al visitante que la conexión no es segura.
El siguiente código actualiza todas las solicitudes para recursos inseguros automáticamente. Esto corrige la advertencia SSL en tu navegador.
Header always set Content-Security-Policy "upgrade-insecure-requests;"
Strict-Transport-Security (HSTS)
HSTS se habilita por defecto en todos los sitios DreamPress. Por favor contacta a soporte si deseas agregar HSTS a dominios adicionales.
Los encabezados Strict-Transport-Security le dicen al navegador que SOLO interactúe con el sitio usando HTTPS y nunca HTTP. Mira las siguientes páginas para más detalles.
- es.wikipedia.org/wiki/HTTP_Strict_Transport_Security
- cheatsheetseries.owasp.org/cheatsheets/HTTP_Strict_Transport_Security_Cheat_Sheet.html
Puedes habilitar esto en tu archivo .htaccess con el siguiente código:
Header set Strict-Transport-Security "max-age=31536000;includeSubDomains;"
Puedes habilitar esto en tu archivo .htaccess con el siguiente código vía SSH:
[server]$ curl -I https://example.com HTTP/1.1 200 OK Date: Fri, 29 Mar 2024 20:05:52 GMT Server: Apache Last-Modified: Fri, 29 Mar 2024 16:26:52 GMT ETag: "2f9-56de78493cbc8" Accept-Ranges: bytes Content-Length: 761 Strict-Transport-Security: max-age=31536000;includeSubDomains; Content-Type: text/html
Precarga de hsts y el subdominio 'www'
Chrome te ofrece la opción de agregar tu dominio a su lista de precarga de HSTS.
Esta prueba fallará si tu sitio está forzando el subdominio 'www' en el panel.
Para pasar la prueba, esta opción debe establecerse en 'Leave it alone'.
Agregar el subdominio 'www' en el panel hará que la comprobación de precarga de HSTS falle con el siguiente mensaje.
`http://example.com` (HTTP) should immediately redirect to `https://example.com`
(HTTPS) before adding the www subdomain. Right now, the first redirect is to
`http://www.example.com/`. The extra redirect is required to ensure that any
browser which supports HSTS will record the HSTS entry for the top level domain,
not just the subdomain.
Cloudflare
Si deseas usar Cloudflare y agregar tu dominio a la lista de precarga de HSTS, debes comprar una cuenta de Cloudflare directamente en Cloudflare.
X-Frame-Options
Este encabezado ayuda a proteger a tus visitantes contra los ataques de clickjacking. Agrega este encabezado en las páginas que no deberían poder representar una página dentro de un marco. Mira los siguientes enlaces para obtener más información:
Este ejemplo desactiva por completo la capacidad de cargar cualquier página en un marco.
Header always set X-Frame-Options DENY
Este ejemplo sólo permite que tu sitio web incruste un iframe en tus páginas.
Header always set X-Frame-Options SAMEORIGIN
Luego puedes probar si está activo corriendo el siguiente comando curl vía SSH:
[server]$ curl -I https://example.com HTTP/1.1 200 OK Date: Fri, 29 Mar 2024 22:49:51 GMT Server: Apache X-Frame-Options: SAMEORIGIN Last-Modified: Fri, 29 Mar 2024 17:05:19 GMT ETag: "2f5-56a72ed086011" Accept-Ranges: bytes Content-Length: 757 Content-Type: text/html
Protección de secuencias de comandos entre sitios (XSS)
El encabezado de X-XSS-Protection ayuda a proteger a tus visitantes contra los ataques de Cross-site Scripting. Mira el siguiente artículo para más detalles:
En este ejemplo, se usa el valor 1. Esto habilita el filtrado XSS (generalmente predeterminado en los navegadores). Si se detecta un ataque de secuencias de comandos entre sitios, el navegador desinfectará la página (eliminará las partes inseguras).
Header set X-XSS-Protection "1"
En este ejemplo, el valor 1; mode=block se utiliza. En lugar de desinfectar la página, el navegador evitará la representación de la página si se detecta un ataque.
Header set X-XSS-Protection "1; mode=block"
Luego puedes probar si está activo ejecutando el siguiente comando curl vía SSH:
[server]$ curl -I https://example.com HTTP/1.1 200 OK Date: Fri, 29 Mar 2024 22:55:52 GMT Server: Apache Last-Modified: Fri, 29 Mar 2024 17:05:19 GMT ETag: "2f5-56a72ed086011" Accept-Ranges: bytes Content-Length: 757 X-XSS-Protection: 1; mode=block Content-Type: text/html
X-Content-Type-Options
Este encabezado bloquea la detección de contenido que podría transformar los tipos MIME no ejecutables en tipos MIME ejecutables. Revisa el siguiente artículo para más detalles:
Header set X-Content-Type-Options nosniff
Luego puedes probar si está activo corriendo el siguiente comando curl vía SSH:
[server]$ curl -I https://example.com HTTP/1.1 200 OK Date: Fri, 29 Mar 2024 23:10:02 GMT Server: Apache Last-Modified: Fri, 29 Mar 2024 17:05:19 GMT ETag: "2f5-56a72ed086011" Accept-Ranges: bytes Content-Length: 757 X-Content-Type-Options: nosniff Content-Type: text/html
Referrer-Policy
Este encabezado controla la cantidad de información de referencia de tu sitio que se envía a otro servidor. Por ejemplo, si un enlace en tu sitio abre un sitio web diferente, el servidor de ese sitio web registra tu nombre de dominio como el referente de ese enlace. Con esta política, puedes controlar qué información de referencia se envía a ese servidor externo. Revisa el siguiente enlace para más detalles.
Este ejemplo no envía ninguna información de referencia.
Header set Referrer-Policy: no-referrer
Luego puedes probar si está activo corriendo el siguiente comando curl vía SSH:
[server]$ curl -I https://example.com HTTP/1.1 200 OK Date: Fri, 29 Mar 2024 00:40:50 GMT Server: Apache Last-Modified: Fri, 29 Mar 2024 00:33:15 GMT ETag: "391-5983506a2c574" Accept-Ranges: bytes Content-Length: 913 Referrer-Policy: no-referrer Content-Type: text/html
Feature-Policy
El encabezado Feature-Policy controla qué funciones del navegador están permitidas en tu sitio web. Esta política permite al propietario/desarrollador del sitio web restringir API específicas a las que el sitio puede acceder en el navegador. Aquí están algunos ejemplos:
- Cambiar el comportamiento predeterminado de reproducción automática en los videos.
- Restringe el sitio del uso de una cámara o micrófono.
- Deshabilita la API de geolocalización.
Esto es importante si el sitio permite contenido de terceros, ya que ayuda a controlar lo que esas aplicaciones de terceros pueden intentar hacer con el navegador del usuario cuando alguien visita tu sitio web. Mira los siguientes enlaces para más información.
- developers.google.com/web/updates/2018/06/feature-policy
- developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy
Este ejemplo bloquea el funcionamiento de la API de geolocalización en el navegador en tu sitio.
Header set Feature-Policy: "geolocation none"
Luego puedes probar si está activo corriendo el siguiente comando curl vía SSH:
[server]$ curl -I https://example.com HTTP/1.1 200 OK Date: Fri, 29 Mar 2024 01:00:49 GMT Server: Apache Last-Modified: Fri, 29 Mar 2024 00:33:15 GMT ETag: "391-5983506a2c574" Accept-Ranges: bytes Content-Length: 913 Feature-Policy: geolocation none Content-Type: text/html
Habilitar CORS
Consulta el siguiente artículo para obtener información sobre cómo configurar los encabezados CORS.