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
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]
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 ; };
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]
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:
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.
{{cite web}}
: CS1 maint: copia archivada como título ( enlace )