¿Es este un método seguro para configurar dinámicamente las opciones de X-Frame? (múltiples dominios)

4
El encabezado

X-Frame-Options evitará que su sitio sea iFramed por otros dominios. En los navegadores que aceptan la directiva ALLOW-FROM , está limitado a especificar un solo origen. Podría usar una directiva CSP 2.0 frame-ancestors para los modernos UA's.

Dicho esto, es posible generar dinámicamente un encabezado de respuesta basado en el remitente de la solicitud y decidir qué tipo de encabezado X-Frame-Options establecer en la respuesta.

Por ejemplo, podría servir por defecto X-Frame-Options: deny y luego, en el nivel del Controlador, representar un deny o simplemente no enviar ningún encabezado X-Frame-Options para permitir que esa solicitud sea iFramed.

Pseudo código:

referer_host = request.referer
if allowed_origins.includes(referer_host)
  response.headers['X-Frame-Options'] = '' # Remove header from response
else
  response.headers['X-Frame-Options'] = 'deny'
end

¿Puede este mecanismo de seguridad ser derrotado? ¿Es posible que un dominio controlado por un atacante falsifique el valor referer que la UA enviará a través de alguna piratería de JavaScript?

    
pregunta Alex Urcioli 06.04.2016 - 01:30
fuente

1 respuesta

5

Por lo que sé, es imposible insertar un encabezado de remitente completamente falso dentro de una sesión de navegación normal. Pero hay varias formas de asegurarse de que no se envíe ningún encabezado de referencia. Por lo tanto, siempre que solo permita que se enmarque si el encabezado del Referer está establecido y que el dominio en el Referer tiene permiso explícito para enmarcar su sitio, debería estar seguro.

Pero tenga en cuenta que debe asegurarse de que su cheque no arroje a ciegas algunas expresiones regulares en el Referer para verificar good-site porque de esta manera también se le permitirá enmarcar algo como http://bad-site/good-site/ o http://good-site.bad-site/ . No serías el primero en cometer ese error.

    
respondido por el Steffen Ullrich 06.04.2016 - 06:37
fuente

Lea otras preguntas en las etiquetas