Scan de las cabeceras de respuesta HTTP de la web https://ericaaguado.es

Asegura tus encabezados de respuesta HTTP

Posted on by

Los encabezados de respuesta HTTP son una de las principales brechas de seguridad de nuestros sitios web. Cuando nuestro navegador visita una página web envía una petición y el servidor devolverá una respuesta HTTP al navegador con información y metadatos que podrían ser rastreados por terceros.

Tanto si eres webmaster como usuario necesitas saber los peligros que corres cuando estableces una conexión con una url de un sitio determinado.

A continuación los encabezados más importantes a tener en cuenta para proteger nuestros sitos web en WordPress y como configurar los en apache y nginx para poder tener controladas las comunicaciones y evitar ataques a nuestro sitio web.

1. Referrer-Policy

Esta cabecera de respuesta HTTP se añade en los enlaces para determinar que datos de origen debe incluir en las peticiones realizadas a esa url. Cuando un usuario abre un enlace de nuestra web el navegador puede registrar en las peticiones la procedencia del enlace lo que atenta contra las políticas de privacidad del visitante.

Podemos controlar las políticas de referencia según su origen, destino y los los niveles de seguridad de los mismos, si usan HTTPS o no.

Sintaxis:

  • Referrer-Policy: no-referrer No pasa ninguna información de referente. Nadie sabe quien envia el enlace ni nada de él, solamente el enlace en sí.
  • Referrer-Policy: no-referrer-when-downgrade No se envía en caso de pasar a un nivel de seguridad menor, por ejemplo si es HTTPS y va a HTTP.
  • Referrer-Policy: origin Siempre envia el origen (la raíz del dominio).
  • Referrer-Policy: origin-when-cross-origin Envía la información de referencia (URL) si el origen es el mismos sitio, si es un enlace a otra página solamente envía el dominio.
  • Referrer-Policy: same-origin Solo se envía info de referente si el destino es el mismo sitio web.
  • Referrer-Policy: strict-origin Envía el origen (la raíz del dominio) si no se baja el nivel de seguridad.
  • Referrer-Policy: strict-origin-when-cross-origin Envía, sino hay bajada de nivel de seguridad, la información de referencia (URL) si el origen es el mismos sitio, si es un enlace a otra página solamente envía el dominio.
  • Referrer-Policy: unsafe-url Establece que siempre se pase información de quien envía el enlace. ¡Cuidado con ella!

Ejemplos configuración:

Configuración en Apache:

$ header set Referrer-Policy "no-referrer-when-downgrade"

Configuración en Nginx:

$ add_header Referrer-Policy "no-referrer" always;

2. Strict-Transport-Security (HSTS)

És una característica del encabezado de respuesta HTTP para indicar a los navegadores que solamente pueden comunicarse mediante HTTPS. Y es recomendable activarla también para el certificado SSL que se use.

En ella se establece el tiempo que el navegador debe recordar acceder con HTTPS y otros parámetros como si va a incluir subdominios esta directiva o si la podemos precargar en base a si el navegador nos lo permite.

Sintaxis:

  • Strict-Transport-Security: max-age=< expire-time> Activarlo indicando tiempo de expiración
  • Strict-Transport-Security: max-age=< expire-time>; includeSubDomains; preload; Añadir otras directivas despues de «;»

Ejemplos configuración:

Configuración en Apache:

$ header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload;"

Configuración en Nginx:

$ add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

3. Frame-Options

Es un encabezado de respuesta HTTP, para los navegadores que lo soporten, encargado de evitar que el contenido sea embebido en otros sitios y evitar así ataques clickjacking, a través de la etiqueta Frame.

Sintaxis:

  • X-Frame-Options: DENY Provoca que falle la carga de la página en otro sitio web, includo si se carga desde el propio sitio.
  • X-Frame-Options: SAMEORIGIN Permite mostrar en marcos en la misma página pero no en otros sitios.
  • X-Frame-Options: ALLOW-FROM https://ericaaguado.es/ Solamente se mostrará en marcos en la página que sea especificada.

Ejemplos configuración:

Configuración en Apache:

$ header set X-Frame-Options DENY
$ header always append X-Frame-Options SAMEORIGIN
$ header set X-Frame-Options "ALLOW-FROM https://ericaaguado.es/"

Configuración en Nginx:

$ add_header X-Frame-Options DENY;
$ add_header X-Frame-Options SAMEORIGIN always;
$ add_header X-Frame-Options ALLOW-FROM https://ericaaguado.es/ ;

4. XSS-Protection

Característica que podemos añadir en nuestros encabezados de respuesta HTTP para evitar ataques Cross-Site XSS que permitirían a un atacante inyectar código en nuestro sitio web. Con ella bloqueamos que se añadan datos desde fuentes no confiables y que se valide si es contenido malicioso o no antes de ser enviado.

En navegadores modernos, esta protección ya se encuentra incluida en la protección del encabezado Content-Security-Policy, que se encarga de desactiva. Pero aún asi es conveniente añadirla por los navegadores antiguos que no reconocen el encabezado Content-Security-Policy.

Sintaxis:

  • X-XSS-Protection: 0 Desactiva el filtro XSS
  • X-XSS-Protection: 1 Activa el filtro XSS y limpia la página de scripting.
  • X-XSS-Protection: 1; mode=block Activa el filtro XSS y evita la visualización de la página en caso de detectarse el ataque.
  • X-XSS-Protection: 1; report= Activa el filtro XSS, limpia la página de scripting y envía un reporte.

Ejemplos configuración:

Configuración en Apache:

$ header set X-XSS-Protection "1; mode=block; report=https://ericaaguado.es"

Configuración en Nginx:

$ add_header X-XSS-Protection "1; mode=block; report=https://ericaaguado.es";

5. Content-Type-Options

Este encabezado de respuesta HTTP se encarga de marcar los tipos MIME como no ejecutables y por tanto no se pueden seguir.

Al activar la directiva nosniff bloqueamos las solicitudes de tipo «style» que el tipo MIME no es «text/css» o «script» si el tipo MIME no es un JavaScript MIME type.

Sintaxis:

  • X-Content-Type-Options: nosniff Bloqueo de los tipo MIME que no deban ser ejecutables.

Ejemplos configuración:

Configuración en Apache:

$ header always set X-Content-Type-Options nosniff

Configuración en Nginx:

$ add_header X-Content-Type-Options nosniff always;

6. Content-Security-Policy (CSP)

El Content-Security-Policy permite controlar los recursos de una página que puede cargar el navegador del visitante. Ayuda a prevenir diversos tipos de ataques XSS y de inyección de datos, ya que nos permiten especificar el origen de los scripts finales a mostrar.

Sintaxis:

  • Content-Security-Policy: upgrade-insecure-requests Permite todo el contenido y indica que las urls con http se traten como si fueran https.
  • Content-Security-Policy: default-src ‘self’ Solo permite contenido del mismo origen.
  • Content-Security-Policy: default-src ‘self’ https://ericaaguado.es https://cdnjs.cloudflare.com Solo permite contenido de las urls (especificamente https)

Ejemplos configuración:

Configuración en Apache:

$ header always set Content-Security-Policy: upgrade-insecure-requests;

Configuración en Nginx:

$ add_header Content-Security-Policy "upgrade-insecure-requests;";

7. Permissions-Policy

Este encabezado de HTTP nos permite controlar algunas funcionalidades del navegador y las API, como el micrófono, cámara etc…

Esta directiva sustituye a Feature-Policy en los nuevos navegadores y hereda todas sus variables.

Sintaxis:

  • geolocation=();midi=();notifications=();push=();sync-xhr=();microphone=();camera=();magnetometer=();gyroscope=();speaker=();vibrate=();fullscreen=();payment=(none)

Ejemplos configuración:

Configuración en Apache:

$ header always set Permissions-Policy: geolocation=(self);midi=(none);notifications=(self);push=(self);sync-xhr=(self);microphone=(none);camera=(none);magnetometer=(none);gyroscope=(none);speaker=(none);vibrate=(none);fullscreen=(self);payment=(none)

Configuración en Nginx:

$ add_header Permissions-Policy "geolocation=(self);midi=(none);notifications=(self);push=(self);sync-xhr=(self);microphone=(none);camera=(none);magnetometer=(none);gyroscope=(none);speaker=(none);vibrate=(none);fullscreen=(self);payment=(none);";

8. Ejemplo para apache y nginx

Desde el panel Plesk podemos configurar tanto a nivel de apache como de nginx las respuestas HTTP. Para ellos necesitamos acceso a la configuración de Apache y nginx con un usuario con permisos para modificar estas directivas.

Si usas apache ya sabes que puedes añadir estas directivas directamente en el fichero .htacces pero mi recomendación es que lo hagas a través del panel Plesk ya que así evitas que incidentes con el fichero htaccess puedan afectar a estas configuraciones.

Ejemplo apache

< IfModule mod_headers.c>
Header set Referrer-Policy "no-referrer-when-downgrade"
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload;"
Header set X-Frame-Options DENY
Header set X-XSS-Protection "1; mode=block; report=https://ericaaguado.es"
Header always set X-Content-Type-Options nosniff
Header always set Content-Security-Policy: "upgrade-insecure-requests"
Header always set Permissions-Policy: "geolocation=(self);midi=(none);notifications=(self);push=(self);sync-xhr=(self);microphone=(none);camera=(none);magnetometer=(none);gyroscope=(none);speaker=(none);vibrate=(none);fullscreen=(self);payment=(none);"
< /IfModule>

Ejemplo nginx

add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options DENY;
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options nosniff always;
add_header Content-Security-Policy "upgrade-insecure-requests;";
add_header Permissions-Policy "geolocation=(self);midi=(none);notifications=(self);push=(self);sync-xhr=(self);microphone=(none);camera=(none);magnetometer=(none);gyroscope=(none);speaker=(none);vibrate=(none);fullscreen=(self);payment=(none);";


Por ahora no hay comentarios

Deja un comentario

Política de comentarios:
Responsable: Érica Aguado Expósito.
Finalidad: Gestionar los comentarios de este blog.
Legitimación: Su consentimiento.

Importante:
Su dirección de correo electrónico no será publicada.
Los campos obligatorios están marcados *.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.