Detener el compromiso de la página web impidiendo la eliminación de fotogramas

5

Mi sitio web ofrece contenido enriquecido para los usuarios. A menudo me suscribo a proveedores externos cuyo contenido inserto en mis páginas. ¿Cómo puedo incrustar de forma segura el contenido de un dominio externo en mi página web en un iframe sin preocuparme de que no puedan salir del marco? No lo harán a propósito (sin arriesgar su clientela / reputación). Sin embargo, dado que casi siempre son tiendas pequeñas, se convierten en un objetivo jugoso para un atacante que quiere desfigurar / redirigir mi sitio web.

¿Hay un encabezado (algo similar / opuesto a X-Frame-Options) que puedo usar en mi página principal para asegurarme de que los iframes que incrusté no puedan romperse? Recuerde, no puedo pedir a los proveedores que agreguen encabezados / scripts a sus páginas. Nunca quieren hacer cosas maliciosas a mi página. El escenario que estoy tratando de cubrir es el de cuando son hackeados.

    
pregunta Naya Bonbo 23.10.2015 - 21:26
fuente

2 respuestas

6

Necesita el atributo sandbox . Este es un nuevo atributo compatible con todos los principales navegadores . El atributo Sandbox impone restricciones adicionales sobre el contenido dentro del iframe; una de esas restricciones es ejecutar javascript. Puede optar por eliminar las otras restricciones que no desea imponer.

Use lo siguiente para incrustar URL de dominios diferentes / no confiables en sus páginas web:

<iframe src="http://example.com/external-content.htm" sandbox></iframe>

Aquí está la referencia rápida (copiada del enlace de w3schools arriba):

  

Cuando el atributo sandbox esté presente, y lo hará:

     
  • tratar el contenido como si fuera de un origen único
  •   
  • envío de formulario de bloque
  •   
  • ejecución de secuencia de comandos
  •   
  • desactivar las API
  •   
  • evitar que los enlaces se dirijan a otros contextos de navegación
  •   
  • impide que el contenido use complementos (a través de,   , u otro)
  •   
  • impide que el contenido navegue por su contexto de navegación de nivel superior (esto es lo que necesitas)
  •   
  • bloquear funciones activadas automáticamente (como reproducir un video automáticamente o enfocar automáticamente un control de formulario)
  •   
    
respondido por el CodeExpress 24.10.2015 - 21:43
fuente
2

Después de una búsqueda rápida, encontré las siguientes dos preguntas relevantes sobre StackOverflow (SO) sobre esto:

  1. Evitar que el iframe infantil se "salga del marco" ; y
  2. Buster de Frame Buster ... código de buster necesario

Estas preguntas están un poco anticuadas, pero sugieren aplicar el siguiente código para evitar redirecciones principales (arriba):

<script type="text/javascript">
    var prevent_bust = 0;
    window.onbeforeunload = function() { prevent_bust++; }
    setInterval(function() {
      if (prevent_bust > 0) {
        prevent_bust -= 2;
        window.top.location = 'http://example.org/page-which-responds-with-204';
        /* Replace URL with a page that actually responds with HTTP status code 204 */
      }
    }, 1);
</script>

Básicamente, este fragmento de JavaScript impedirá que la página iframed realice cambios en top.location ; por lo tanto, este código evita que el iframe redirija.

La segunda pregunta de SO era la fuente original de este código, pero esa pregunta era una forma de eliminar este código de eliminación de iframe-buster. (En otras palabras, SO source # 2 estaba buscando una manera de evitar este código que evita las redirecciones de iframe). Sin embargo, no parece que se haya presentado una solución viable para evitar este código anti-redirect. Entonces, esto parece ser una solución bastante segura.

Por supuesto, cada vez que incluya un iframe u otro código de otro sitio web / servidor, hereda algunos riesgos al hacerlo. Sin embargo, esta debería ser una solución viable para mitigar ese riesgo.

    
respondido por el Spencer Doak 23.10.2015 - 21:57
fuente

Lea otras preguntas en las etiquetas