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.

10 comentarios en “Ajax y el "Access Denied" cross-domain con un IFrame”

  1. 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

  2. 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, 😉

  3. 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

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

  5. 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.

  6. 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!

  7. 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.

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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *