Cómo evitar el ataque de scripts a través de cuadros sobre la aplicación php que usamos

5

He desarrollado una aplicación web que está en Core-PHP según los requisitos del cliente. Mi cliente realizó una prueba de vulnerabilidad y encontró una secuencia de comandos entre marcos como una vulnerabilidad en un nivel difícil.

¿Qué se puede hacer en este caso para evitarlo? ¿Hay alguna opción mejor disponible?

    
pregunta Shaggie 07.12.2016 - 13:36
fuente

3 respuestas

3

Las secuencias de comandos de marcos cruzados permiten que un atacante incruste su sitio web dentro de su propio marco, como marco / iframe y luego espíe a los usuarios de su sitio web.

Esto requiere algo de ingeniería social. Un atacante podría engañar a alguien para que visite su página web, con un iframe que contiene (digamos) el inicio de sesión en su sitio web. El sitio web principal también tendría que tener algún Javascript malicioso para leer las pulsaciones de teclas para capturar el inicio de sesión. Teóricamente, los navegadores tienen una política del mismo origen que debería evitar que el atacante pueda hacer esto, sin embargo, en realidad este ataque es posible, a menudo debido a errores del navegador .

Defensas:

  1. Según la especificación de W3, debe incluir el encabezado frame-ancestors de la Política de seguridad de contenido en su respuesta HTTP para evitar que su sitio web se cargue en un marco. Es posible que algunos navegadores más antiguos no tengan soporte para este encabezado, por lo que también use el encabezado Opciones de X-Frame con el valor DENY, SAMEORIGIN o ALLOW-FROM uri. X-Frame-Options tiene prioridad sobre los antepasados de cuadros CSP en algunos navegadores.

  2. Además, podría tener algún código de JavaScript para "romper el cuadro" que evitará que su sitio web se "enmarque" en los navegadores más antiguos.

Estas soluciones y más detalles se discuten en esta hoja de referencia de OWASP .

    
respondido por el Jedi 07.12.2016 - 15:52
fuente
0

De esto y this el mejor lugar para obtener más información sobre el problema

@*Prevent Cross-Frame Scripting attacks*@
<script>
    (function (window) {
        if (window.location !== window.top.location)
            window.top.location = window.location;
    })(this);
</script>
    
respondido por el Kurkula 08.06.2018 - 00:40
fuente
0

No puedo encontrar la pregunta relacionada donde encontré este enlace, pero aquí hay un documento sobre FrameBusting y cómo Deberías implementarlo.

Escrito por Gustav Rydstedt, Elie Bursztein y Dan Boneh de la Universidad de Stanford con la colaboración de Collin Jackson de la Universidad Carnegie Mellon

Esta es la recomendación en papel:

<style>
    body {display: none; }
</style>
<script>
    if (self === top) {
        document.getElementsByTagName("body")[0].style.display = 'block';
    } else {
        top.location = self.location
    }
</script>

Fíjate en display: none , esto es muy importante, porque el atacante solo puede desactivar javascript en parte de tu página. Consulte el documento para obtener más información.

    
respondido por el Guillaume Beauvois 08.06.2018 - 10:25
fuente

Lea otras preguntas en las etiquetas