stringtranslate.com

Asesino de cuadros

Un framekiller (o framebuster o framebreaker ) es una técnica utilizada por sitios web y aplicaciones web para evitar que sus páginas web se muestren dentro de un marco . Un marco es una subdivisión de una ventana del navegador web y puede actuar como una ventana más pequeña. Un framekiller se utiliza generalmente para evitar que un sitio web se cargue desde dentro de un conjunto de marcos sin permiso o como un ataque, como en el caso del clickjacking .

Los scripts Framekiller han sido reemplazados en gran medida por el uso de encabezadosX-Frame-Options y , que evitan que la página se cargue en un marco en primer lugar. Estos encabezados son compatibles con todos los navegadores modernos y no requieren el uso de JavaScript . [1] Estos encabezados también están pensados ​​para especificarse dentro del software del servidor web , en lugar de directamente dentro del HTML.Content-Security-Policy

Implementaciones

Los framekillers se implementan mediante JavaScript que valida si la ventana actual es la ventana principal. El enfoque recomendado es bloquear la representación de la ventana de forma predeterminada y desbloquearla solo después de confirmar que la ventana actual es la principal:

< estilo > html { display : none ; } < / estilo> < script > if ( self == top ) { documento . documentElement . estilo . display = 'block' ; } de lo contrario { top . ubicación = self . ubicación ; } < / script>                 

Este enfoque fue propuesto en 2010 por Gustav Rydstedt, Elie Bursztein , Dan Boneh y Collin Jackson en un artículo que destacaba las limitaciones de las técnicas de ruptura de cuadros existentes junto con las técnicas que permiten evitarlas. [2]

Soluciones alternativas

Una opción alternativa es permitir que el usuario determine si desea que el framekiller funcione.

var framekiller = false ; window . onbeforeunload = function () { if ( framekiller ) { return "..." ; // cualquier mensaje que ayude al usuario a tomar una decisión } };              

y el código siguiente debe agregarse después de la etiqueta del marco:

//"my_frame" debe cambiarse de acuerdo con el id real del marco en el documento de su página . getElementById ( "my_frame" ). onload = function () { framekiller = true ; };       

Asesinos de cuadros originales

Históricamente, los primeros scripts de framekiller eran tan simples como esto:

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

La lógica aquí era mostrar la página, pero verificar si la ubicación superior es la misma que la página actual y reemplazar la ubicación superior por la actual si no lo es. Sin embargo, este método se puede omitir fácilmente bloqueando la ejecución del script Framebuster desde el marco externo. [2]

Limitaciones de Framekiller

La solución de JavaScript del lado del cliente depende de que el navegador del usuario final aplique su propia seguridad. Esto la convierte en un medio beneficioso, pero poco confiable, de impedir que su página se incruste en otras páginas. Las siguientes situaciones pueden hacer que el script anterior sea inútil:

Anti-asesino de cuadros

El iframe en HTML5 tiene un atributo sandbox . [3] El valor del atributo es un conjunto de capacidades permitidas para el contenido del iframe. Si el valor está vacío o no se establece, el contenido del iframe no ejecutará JavaScript y no permitirá la navegación de nivel superior. Al especificar allow-scripts en el conjunto de excepciones separadas por espacios en el valor, el iframe permitirá JavaScript, pero seguirá deshabilitando la navegación de nivel superior, lo que hace que los framekillers en el iframe sean impotentes.

Véase también

Referencias

  1. ^ "CSP: ancestros de los marcos" . Consultado el 27 de septiembre de 2023 .
  2. ^ ab G. Rydstedt; E. Bursztein; D. Boneh; C. Jackson (2010). "Cómo acabar con el Frame Busting: un estudio de las vulnerabilidades de clickjacking en sitios populares". 3.er taller sobre seguridad y privacidad en la Web 2.0 . IEEE.
  3. ^ "Copia archivada". Archivado desde el original el 6 de junio de 2013. Consultado el 1 de noviembre de 2014 .{{cite web}}: CS1 maint: copia archivada como título ( enlace )