Algunos sitios web tienen código para «romper» de IFRAME recintos, lo que significa que si una página A se carga como un IFRAME dentro de una página para los padres P Javascript en A redirige el exterior de la ventana para A.

Normalmente Javascript se ve algo como esto:

<script type="text/javascript">
  if (top.location.href != self.location.href)
     top.location.href = self.location.href;
</script>

Mi pregunta es: Como el autor de la página principal P y no ser el autor de la página interior A, ¿cómo se puede prevenir A de hacer este salto?

P. S. me parece que debería ser un cross-site violación de seguridad, pero no lo es.

  • Yo creo que no se puede hacer mucho a todos… si usted no es el autor del contenido del cuadro.
InformationsquelleAutor Jason Cohen | 2008-12-15

9 Comentarios

  1. 42

    Trate de usar el onbeforeunload de la propiedad, lo que permite que el usuario elija si quiere navegar fuera de la página.

    Ejemplo: https://developer.mozilla.org/en-US/docs/Web/API/Window.onbeforeunload

    En HTML5 puede utilizar el entorno limitado de la propiedad. Por favor, consulte Pankrat la respuesta a continuación.
    http://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/

    • iFrames hacer permitir cruz-dominio de la comunicación, aunque, el uso de postMessage. Esto no es un riesgo de seguridad, pero alguien podría cuidado de saber que existe esta posibilidad cuando ven tu comentario. 🙂
    • No fue posible en el momento de escribir esta respuesta. Gracias por señalándolo.
    • podría usted por favor, mostrar un ejemplo, muy, muy apreciado.
    • El usuario no sabe por qué esta confirmación que aparece, y probablemente seleccione una respuesta aleatoria. Yo no se recomienda su uso. Hay otras soluciones – el sandbox.
    • En realidad se puede incluir un mensaje en el onbeforeunload emergente. ;- ), Pero no olvidemos que la visualización de una página en un iframe, que no quiere que se mostrará en un cuadro, es el robo de contenido. Hay una plétora de opciones de malograr un intento de este tipo, algunas de las cuales implican Goatse. 🙂
    • El segundo artículo me ha ayudado mucho. Gracias 😉

  2. 121

    Con HTML5 el iframe sandbox atributo se agregó. En el momento de escribir este funciona en Chrome, Safari, Firefox y en las últimas versiones de IE y Opera pero hace bastante más de lo que usted desea:

    <iframe src="url" sandbox="allow-forms allow-scripts"></iframe>

    Si quieres permitir de nivel superior redirige especificar sandbox="allow-top-navigation".

    • espera… ¿qué? Que permita hacer esto? Pensé en un sitio web si quería salir, todos los navegadores iba a dejar. ¿Cómo se supone que la gente a mantener su sitio web fuera de iframes con esto? No me estoy quejando, aunque, impresionante.
    • Aquí está el antídoto: blogs.msdn.com/b/ieinternals/archive/2010/03/30/…
    • Además, el navegador puede/va a respetar el encabezado del iframe src solicitud: X-Frame-Options:SAMEORIGIN
    • Si usted quiere proteger su sitio se muestre en el iframe no es X-Frame-Options encabezado disponible con SAMEORIGIN valor. La mayoría de los navegadores modernos no visualización del sitio en el iframe con este encabezado.
    • Si algunos de los iframes no están trabajando para usted (tales como incrustado de youtube), también puede agregar allow-same-origin. Esto ayuda a: w3schools.com/tags/att_iframe_sandbox.asp
    • Por desgracia sandbox no permitir Flash o cualquier otro tipo de objeto en el espacio aislado de la trama, haciendo que el sandboxcaracterística inútil en muchos casos.
    • Los sitios web no debe «romper» en protesta por ser incluidos en un iframe. Ellos pueden simplemente mostrar un mensaje o ir en blanco. Por desgracia, lo que permite la ejecución de los scripts en el iframe todavía se abre a un pícaro iframe haciendo while(1) {} y otros bucles infinitos. Les deseo a cada uno iframe podría conseguir su propio hilo.

  3. 45

    Yo uso sandbox=»…»

    • permitir formularios permite el envío de formularios
    • permitir pop-ups permite a los pop-ups
    • permitir-puntero-lock permite pointer lock
    • permitir mismo origen permite que el documento de mantener su origen
    • permitir secuencias de comandos permite la ejecución de JavaScript, y también permite funciones para activar automáticamente
    • permitir superior de navegación permite que el documento salir de la estructura de navegación de la ventana de nivel superior

    Superior de navegación es lo que queremos evitar, así que deje que se fuera y no será permitido. Todo lo que quede fuera será bloqueado

    ex.

            <iframe sandbox="allow-same-origin allow-scripts allow-popups allow-forms" src="http://www.example.com"</iframe>
    • Tenga en cuenta que el Flash (y otros objetos) también serán bloqueados, con la opción de permitir que se. Esta «función de seguridad» me impide el uso de sandbox todos juntos
  4. 4

    Sé que ha sido un largo tiempo desde que la pregunta fue hecha, pero aquí está mi versión mejorada se va a esperar 500ms para cualquier ulterior convocatoria sólo cuando el iframe es cargado.

    <script type="text/javasript">
    var prevent_bust = false ;
        var from_loading_204 = false;
        var frame_loading = false;
        var prevent_bust_timer = 0;
        var  primer = true;
        window.onbeforeunload = function(event) {
            prevent_bust = !from_loading_204 && frame_loading;
            if(from_loading_204)from_loading_204 = false;
            if(prevent_bust){
                prevent_bust_timer=500;
            }
        }
        function frameLoad(){
            if(!primer){
                from_loading_204 = true;
                window.top.location = '/?204';
                prevent_bust = false;
                frame_loading = true;
                prevent_bust_timer=1000;
            }else{
                primer = false;
            }
        }
        setInterval(function() {  
            if (prevent_bust_timer>0) {  
                if(prevent_bust){
                    from_loading_204 = true;
                    window.top.location = '/?204';
                    prevent_bust = false;
                }else if(prevent_bust_timer == 1){
                    frame_loading = false;
                    prevent_bust = false;
                    from_loading_204 = false;
                    prevent_bust_timer == 0;
                }
    
    
    
            }
            prevent_bust_timer--;
            if(prevent_bust_timer==-100) {
                prevent_bust_timer = 0;
            }
        }, 1);
    </script>

    y onload="frameLoad()" y onreadystatechange="frameLoad();" debe ser añadido al frame o iframe.

  5. 2

    Ya que la página se carga dentro del iframe se puede ejecutar el «romper el código», con un setInterval, onbeforeunload podría no ser práctico, ya que se podría flud el usuario con ‘¿Está seguro que desea salir?’ diálogos.

    También existe el iframe atributo de seguridad que sólo funciona en IE & Opera

    🙁

  6. 2

    En mi caso quiero que el usuario visite la página interior por lo que el servidor va a ver su ip como visitante. Si puedo usar el php proxy técnica creo que el interior de la página se vea mi ip del servidor, como visitante, por lo que no es bueno. La única solución que tengo hasta el momento es wilth onbeforeunload.
    Ponga esto en su página:

    <script type="text/javascript">
        window.onbeforeunload = function () {                       
             return "This will end your session";
        }
    </script>

    Esto funciona tanto en firefox y ie, eso es lo que he probado para.
    usted encontrará las versiones con algo como evt.retorno(lo que sea) mierda… que no funciona en firefox.

Dejar respuesta

Please enter your comment!
Please enter your name here