without top scripts prevent allow javascript html iframe

javascript - prevent - sandbox allow top navigation allow scripts allow forms



Cómo evitar que IFRAME redirija la ventana de nivel superior (9)

Al hacerlo, podrás controlar cualquier acción de la página enmarcada, lo cual no puedes hacer. Se aplica la política de origen del mismo dominio .

Algunos sitios web tienen un código para "salir" de los alojamientos IFRAME , lo que significa que si una página A se carga como un IFRAME dentro de una página principal P algunos Javascript en A redirigen la ventana externa a A

Por lo general, este Javascript se ve más o menos así:

<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 padre P y no siendo el autor de la página interior A , ¿cómo puedo evitar que A haga esta ruptura?

PD: me parece que debería ser una violación de seguridad entre sitios, pero no lo es.


Como la página que carga dentro del iframe puede ejecutar el código "break out" con un setInterval, onbeforeunload podría no ser tan práctico, ya que podría confundir al usuario con ''¿Está seguro de que quiere irse?'' diálogos.

También está el atributo de seguridad iframe que solo funciona en IE & Opera

:(




En mi caso, quiero que el usuario visite la página interna para que el servidor vea su IP como visitante. Si utilizo la técnica de proxy php, creo que la página interna verá mi servidor ip como visitante, por lo que no es bueno. La única solución que obtuve hasta ahora es la de antes de descargar. Pon esto en tu página:

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

Esto funciona tanto en Firefox y es decir, eso es lo que probé. encontrarás versiones que usan algo como evt.return (lo que sea) basura ... eso no funciona en Firefox.




Sé que ha pasado mucho tiempo desde que se hizo la pregunta, pero aquí está mi versión mejorada, esperará 500 ms para cualquier llamada posterior solo cuando se cargue el iframe.

<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 agregarse al marco o al marco flotante.


Yo uso sandbox = "..."

  • allow-forms permite el envío de formularios
  • permitir-popups permite pop-ups
  • allow-pointer-lock permite el bloqueo del puntero
  • permitir el mismo origen permite que el documento mantenga su origen
  • allow-scripts permite la ejecución de JavaScript y también permite que las características se activen automáticamente
  • allow-top-navigation permite que el documento salga del marco navegando por la ventana de nivel superior

La navegación superior es lo que desea evitar, así que déjelo y no se permitirá. Cualquier cosa que quede será bloqueada

ex.

<iframe sandbox="allow-same-origin allow-scripts allow-popups allow-forms" src="http://www.example.com"</iframe>