Para protegerse contra el clickjacking, ¿es seguro que una página web muestre su contenido hasta que se detecte el encuadre?

2

Supongamos que tenemos una página web que no puede usar X-Frame-Options , y la protección Clickjacking debe estar basada en JavaScript. En esta página, todas las acciones confidenciales y la visualización de información sensible se basan en JS, por lo que, por el bien de la pregunta, podemos asumir que JS está habilitado y en ejecución.

La técnica estándar actual consiste en comparar self con top y mostrar el contenido según el resultado. Ejemplo de OWASP :

<style id="antiClickjack">body{display:none !important;}</style>

Y luego elimine ese estilo por su ID inmediatamente después en el script:

<script type="text/javascript">
   if (self === top) {
       var antiClickjack = document.getElementById("antiClickjack");
       antiClickjack.parentNode.removeChild(antiClickjack);
   } else {
       top.location = self.location;
   }
</script>

Yo llamaría a este enfoque "no cerrado" porque el contenido permanece invisible hasta que JS considera que self es igual a top .

También hay una técnica de "apertura abierta" comúnmente utilizada en la que, si self no es igual a top , el contenido se oculta a través de CSS o al establecer document.body.innerHTML='' .

Pregunta : ¿se puede omitir esta última protección de manera diferente que usar el atributo sandbox en el iframe de los padres?

No lo creí hasta que leí esto blog comentar comparando las dos técnicas, y me pregunto si "no abrir" es lo suficientemente seguro:

  

"Podría usar varias cargas de JS en la página principal para hacer que el script de creación de cuadros en el iframe falle, evitando que oculte el contenido de la página.   [...]   Los que, en cambio, hacen aparecer el contenido de la página si no se está enmarcando fueron y siguen siendo perfectamente adecuados ".

    
pregunta kazhtaco 23.06.2016 - 16:58
fuente

1 respuesta

0

Según su artículo de OWASP citado, hay algunos ejemplos más abajo en la página . p.ej. Este para evitar que el código de framebuster se cargue:

<iframe src="http://www.victim.com/?v=<script>if">

Estosepuedemitigarmedianteelusode encabezados de seguridad :

X-XSS-Protection: 1; mode=block

Esto evitará que se renderice toda la página en caso de que se produzca tal ataque de cadena de consulta.

    
respondido por el SilverlightFox 24.06.2016 - 17:18
fuente

Lea otras preguntas en las etiquetas