Encabezados 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 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.

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.

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.

Ver también

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?