2012-11-06 5 views
5

Grundsätzlich möchte ich einen iFrame haben, der seinen Inhalt immer so einschränkt, als käme er aus einer anderen Domäne, selbst wenn der Inhalt vom selben Ursprung stammt.Wie kann ich verhindern, dass JavaScript in einem iFrame auf Eigenschaften der äußeren Website zugreift, selbst wenn der Inhalt des iFrames vom selben Ursprung stammt?

Gibt es eine Möglichkeit, dies zu tun?

+0

Sie können sich vielleicht [Caja] (http://code.google.com/p/google-caja/) oder [AdSafe] (http://www.adsafe.org/) ansehen. Sie stellen einen Wrapper für "guestcode" zur Verfügung, um sie daran zu hindern, Dinge mit Ihrem globalen Objekt zu tun. – Christoph

Antwort

1

Dies wird window.parent im untergeordneten Frame/Fenster ausblenden, aber nicht die top Eigenschaft.

ABER die Eigenschaft window.parent ist bis zum Ende des onload-Ereignisses des untergeordneten Fensters/Rahmens noch verfügbar.

<html> 
    <head> 
    <style type="text/css"> 
     #wrapper {width:1000px;height:600px;} 
    </style> 
    <script type="text/javascript"> 
     window.onload = function() { 
     var frm = document.getElementById('childFrame'); 
     var win = frm.contentWindow || (frm.contentDocument && frm.contentDocument.parentWindow) || (frm.document && frm.document.parentWindow); 
     if (win) win.parent = null; 
     } 
    </script> 
    </head> 
    <body> 
    <div id="wrapper"> 
     <iframe id="childFrame" src="child.html" frameborder="0" style="width:100%;height:100%;"></iframe> 
    </div> 
    </body> 
</html> 
+1

Das scheint mir nicht sehr sicher zu sein. Wenn * irgendwelche * verweilenden Verweise auf das Elternfenster irgendwo im Kind-Iframe vorhanden sind, werden sie auslaufen und Sie haben nur die Illusion von Sicherheit. – apenwarr