¿Es seguro el src de un iframe para la entrada del usuario?

3
<iframe sandbox="allow-scripts allow-same-origin"
  src="javascript:alert(1)">

¿Me gustaría saber si el atributo src de un iframe es seguro para la entrada del usuario? Encontré esta pregunta , pero mi duda es que probé el código proporcionado en la respuesta y no hace nada con el atributo sandbox="allow-scripts allow-same-origin" .

Estoy permitiendo que el usuario publique videos, al hacerlo, cuando el usuario publica un enlace en el backend, se realiza una solicitud de obtención para obtener el valor correcto en la etiqueta meta . Sin embargo, nada detiene a OP para publicar un enlace a www.my-site-with-fake-meta-tag.com y tratar de hacer algo divertido.

Por lo tanto, podría incluir en la lista blanca algunos dominios, pero es un proceso molesto. Además de cada sitio que verifiqué, utiliza un iframe src para el contenido enviado por el usuario.

    
pregunta Ced 06.04.2017 - 03:32
fuente

1 respuesta

2

No, un <iframe src=...> proporcionado por el usuario no es seguro.

El alert() en su ejemplo no se activa porque la propiedad sandbox bloquea automáticamente los cuadros de diálogo modales (cuadros de alerta). Pero como ha configurado allow-scripts , el código JS todavía se ejecuta en segundo plano. Y como allow-same-origin está configurado, incluso se ejecuta en el mismo dominio que la página de incrustación. El uso conjunto de estos ajustes hace que el atributo de sandbox sea inútil porque le está dando privilegios completos a sandbox.

Como prueba de concepto, simplemente use otra función, por ejemplo, document.write() :

<iframe sandbox="allow-scripts allow-same-origin" src="javascript:document.write(document.domain)">

O agregue la directiva allow-modals (que curiosamente no está documentada actualmente):

<iframe sandbox="allow-scripts allow-same-origin allow-modals" src="javascript:alert(1)">

Tenga en cuenta que en lugar del esquema javascript: , un atacante también podría inyectar un URI data: :

<iframe sandbox="allow-scripts allow-same-origin allow-modals" src="data:text/html,<script>alert(1)</script>">

Si su plan era otorgar a la página incrustada el menor número de permisos posible, podría haber dejado el atributo de espacio de pruebas vacío:

<iframe sandbox src="...">
    
respondido por el Arminius 06.04.2017 - 03:50
fuente

Lea otras preguntas en las etiquetas