Cabeceras de seguridad

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 incluye en la lista blanca fuentes de contenido aprobadas, ayuda a evitar que se cargue código malicioso en su sitio. Esta es una forma de ayudar a reducir los riesgos de XSS.

Ve 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 su dominio a través de HTTPS solo en el puerto 443.

Header set Content-Security-Policy "default-src https://example.com:443"

Luego puede probar si está activo ejecutando el siguiente comando curl via SSH:

[server]$ curl -I https://example.com
HTTP/1.1 200 OK
Date: Mon, 25 Nov 2019 22:17:47 GMT
Server: Apache
Last-Modified: Sun, 22 Apr 2018 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

Resolución de advertencias de sitios inseguros y contenido mixto

Si tu sitio web tiene activos que se cargan a través de http, su 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 su navegador.

Header always set Content-Security-Policy "upgrade-insecure-requests;"

Strict-Transport-Security (HSTS)

Los encabezados Strict-Transport-Security le dicen al navegador que SOLO interactúe con el sitio usando HTTPS y nunca HTTP. Ve las siguientes páginas para más detalles.

Puedes habilitar esto en su 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 via SSH:

[server]$ curl -I https://example.com
HTTP/1.1 200 OK
Date: Tue, 05 Jun 2018 20:05:52 GMT
Server: Apache
Last-Modified: Tue, 05 Jun 2018 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 le ofrece la opción de agregar su 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 ha habilitado Cloudflare en el panel DreamHost, le obliga a agregar el subdominio 'www' como se muestra en estos artículos.

Si deseas utilizar Cloudflare y agregar tu dominio a la lista de precarga de HSTS, debes comprar una cuenta de Cloudflare directamente de Cloudflare. Esto te permitirá la opción de eliminar el subdominio 'www'.

X-Frame-Options

Este encabezado ayuda a proteger a sus 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. Velos 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 sus páginas.

Header always set X-Frame-Options SAMEORIGIN

Luego puedes probar si está activo ejecutando el siguiente comando curl via SSH:

[server]$ curl -I https://example.com
HTTP/1.1 200 OK
Date: Mon, 25 Nov 2019 22:49:51 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
Last-Modified: Sun, 22 Apr 2018 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 sus visitantes contra los ataques de Cross-site Scripting. Ve 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 via SSH:

[server]$ curl -I https://example.com
HTTP/1.1 200 OK
Date: Mon, 25 Nov 2019 22:55:52 GMT
Server: Apache
Last-Modified: Sun, 22 Apr 2018 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. Ve el siguiente artículo para más detalles:

Header set X-Content-Type-Options nosniff

Luego puedes probar si está activo ejecutando el siguiente comando curl via SSH:

[server]$ curl -I https://example.com
HTTP/1.1 200 OK
Date: Mon, 25 Nov 2019 23:10:02 GMT
Server: Apache
Last-Modified: Sun, 22 Apr 2018 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 su 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. Ve 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 ejecutando el siguiente comando curl via SSH:

[server]$ curl -I https://example.com
HTTP/1.1 200 OK
Date: Tue, 26 Nov 2019 00:40:50 GMT
Server: Apache
Last-Modified: Tue, 26 Nov 2019 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 su sitio web. Ve los siguientes enlaces para más información.

Este ejemplo bloquea el funcionamiento de la API de geolocalización en el navegador en su sitio.

Header set Feature-Policy: "geolocation none"

Luego puedes probar si está activo ejecutando el siguiente comando curl via SSH:

[server]$ curl -I https://example.com
HTTP/1.1 200 OK
Date: Tue, 26 Nov 2019 01:00:49 GMT
Server: Apache
Last-Modified: Tue, 26 Nov 2019 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.

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?