2010-07-25 22 views
5

Facebook y otros ofrecen pequeños snipplets iframe que puedo poner en mi sitio. Ejemplo:¿Comprende la seguridad de iframes de terceros?

<iframe src="http://www.facebook.com/widgets/like.php?href=http://example.com" 
     scrolling="no" frameborder="0" 
     style="border:none; width:450px; height:80px"></iframe> 

Lo que me gustaría saber es, si pongo este código dentro de mi lado, ¿podría el código que se carguen en mi página de acceso al DOM de la página? Veo algunos problemas de seguridad si es así.

Del mismo modo, Facebook me permite poner un iframe en su sitio, así es como funcionan las aplicaciones de Facebook. ¿Podría extraer los datos de cualquier página que contenga mi iframe?

Nota Utilicé Facebook como ejemplo aquí, pero muchas empresas hacen lo mismo, por lo que esta pregunta no es específica de Facebook de ninguna manera, así que no la estoy etiquetando como tal.

¿Puede también la página primaria acceder al DOM del iframe?

Respuesta

3

En realidad, existen reglas específicas de inheritance for iframes. Esto es parte de la política del mismo origen, y recomiendo leer todo el Manual del navegador de Google.

+0

enlace muy útil –

3

Sé que la página principal puede acceder al DOM del iframe. Recientemente tuvimos un proyecto en el trabajo donde teníamos un sitio que debía cumplir 508. El iframe no lo era y aunque los lectores de pantalla manejan iframes mucho mejor, el contenido dentro de este iframe no era compatible. Cargamos la biblioteca jquery en nuestro sitio, y luego también cargamos código en nuestro sitio para manipular el iframe (solo después de que se cargue) y en ese momento combinamos el contenido de los iframes para que sea accesible.

Para que tenga una idea de cómo lo hicimos aquí hay una muestra de nuestro jquery. (Usó una gran cantidad de hallazgos y reemplazos, pero se entiende, podría hacer otras cosas).

$('iframe').load(function() { 
    var f = $(this).contents(); 
    f.find('#sysverb_back').remove(); 
    f.find('a.column_head').each(function(){ 
     $(this).attr('title', $(this).text()); 
    });   
    f.find('img[title]:not([alt])').each(function(){ 
     $(this).attr('alt',$(this).attr('title')); 
    }); 
    f.find('input').filter(function() { 
     return this.id.match(/sys_readonly\..+|ni\..+/); 
    }).each(function() { 
     $(this).before('<label for="'+this.id+'" style="display:none;">'+this.id+'</label>'); 
    }); 

}); 

});

Aunque no sé si puede desde el iframe acceder al DOM principal.

+0

Al acceder al DOM de parnet es donde veo el problema de seguridad, acepto acceder al contenido de iframe del niño. – Winforms

+2

@Winforms no, no debería, porque un atacante podría poner un '