.

Ajax y el "Access Denied" cross-domain con un IFrame

   Uno de los grandes problemas que tenemos en lo referente a seguridad web, son los temido ataques "cross-site scripting". Algo que navegadores como IE (Internet Explorer) solventa con la negacion por defecto de acceso a scripts que estan hospedados en dominios distintos a los de nuestras aplicacion. Algo que otros navegadores no han optado por llevarlo desde un inicio.

   Esto nos lleva a que si tenemos que empotrar nuestro desarrollo dentro de un iframe de terceros, hospedados ambos en servidores distintos nuestra aplicacion funcionara perfectamete en Firefox, Safari, ..... pero no en IE, dandonos el error de "Access is denied" a ese script.

   La solucion es bastante mas sencilla de lo que hayamos podidos leer en otros sitios (1 y 2), simplemente tendremos que agregar a nuestra pagina o master page (dependiendo de donde nos convenga) el siguiente script:

<script type= "text/javascript">

if (Sys.Browser.agent == Sys.Browser.InternetExplorer){

                Sys.UI.DomElement.getLocation=function(a){

                if(a.self||a.nodeType===9)

                    return new Sys.UI.Point(0,0);

                var b=a.getBoundingClientRect();

                if(!b)

                    return new Sys.UI.Point(0,0);

                var c=a.document.documentElement,d=b.left-2+c.scrollLeft,e=b.top-2+c.scrollTop;

                try{

                    var g=a.ownerDocument.parentWindow.frameElement||null;

                    if(g){

                        var f=2-(g.frameBorder||1)*2;

                    d+=f;e+=f

                    }

               }catch(h){}

               return new Sys.UI.Point(d,e)}};

</script>

Espero que os sea util, y no os saque de vuestras casillas las distintas politicas e interpretaciones de cada navegador.

Posted: 1/8/2008 11:40 por Thempra | con 11 comment(s)
Archivado en: ,
Comparte este post:

Comentarios

Luis Reyes ha opinado:

Oye tengo una duda aplico t código pero ahora me dice que sys no esta definido, ya verifique el web config de hecho el sitio lo cree desde ajax web site y aun me marca lo de Sys indefinido

# August 7, 2008 12:24 AM

Thempra ha opinado:

Revisa el lugar donde has puesto el codigo. Prueba por ejemplo a colocarlo debajo de la definicion del ScriptManager.

He reeditado el post para que sea legible el codigo. De echo buscando acabo de darme cuenta que Marc Rubiño trato este mismo tema hace unos meses, ;)

# August 7, 2008 8:54 AM

Julian ha opinado:

Hola, muchas gracias por el script, ahora todo funciona muy bien. Te recomiendo que pongas el } que hace falta despues del último return, debería quedar así: return new Sys.UI.Point(d,e)}};

gracias

# August 11, 2008 10:22 PM

Thempra ha opinado:

Gracias por la nota Julian.

# August 12, 2008 8:09 AM

Trabajando con Ajax y las Microsoft Ajax Library (ScriptManager, UpdatePanel etc…) e IFrames: Como resolver el error “Access Denied”. « a deshoras ha opinado:

PingBack desde  Trabajando con Ajax y las Microsoft Ajax Library (ScriptManager, UpdatePanel etc&#8230;) e IFrames: Como resolver el error &#8220;Access Denied&#8221;. &laquo; a deshoras

# September 11, 2008 7:17 PM

David Bernad ha opinado:

Hola.

Tengo un problema y no sé si es el mismo. Tengo una aplicación que incluye en otra mediante un iframe, cada una en un servidor distinto. El contenido del iframe se ve bien en safari y en firefox, pero no en Internet Explorer.

Me da un error de javascript "Permission denied" pero lo he mirado en la consola de Firefox y también se muestra este error, es un error de acceso a un objeto.

He probado a incluir tu código en la página donde cargo el iframe pero no sirve de nada, por eso creo que no se trata del mismo error.

¿Alguna idea?

Gracias de antemano.

# February 4, 2009 5:32 PM

Juan ha opinado:

Hola, muchisimas gracias!! me salvastes de un error que me traia mal y era dificil encontrar una solucion en la web!!!

nuevamente gracias!!

# August 19, 2009 9:23 PM

research papers writing ha opinado:

Students, want to know that they have someone who will be ready to aid them with research essays composing. So, those people visit term paper writing company because of it!

# February 10, 2011 11:38 AM

Sieira ha opinado:

Eso no me parece una "política de seguridad". Me parece una chapuza como una casa. Microsoft todo lo soluciona haciendo parecer que es el desarrollador el que ha cometido algún error, saltándose a la torera todos los estándares y decidiendo que para evitar que entren en tu casa, lo mejor es tapiar las puertas y las ventanas.

No cumple ni mínimamente bien con las especificaciones de CSS (al menos en su versión 2), desarrollo en linux, y todo lo pruebo sistemáticamente en opera, firefox, konqueror, safari y chrome.

Mientras que en general todo funciona de forma homogénea en todos ellos, es cuando llego a IE (siempre lo compruebo en último lugar) cuando comienzan a aparecer fallos.

Agradezco muchísimo el script, llevaba horas intentando solucionarlo.

# April 11, 2011 5:10 PM

Alejandro ha opinado:

Que el acceso libre a script que estan hospedados en otro sitio no te parece un agujero de seguridad ? Asi sin ningun control ? Buenoooooooo ........

# April 11, 2011 6:18 PM