有没有办法限制 iframe 在父级中允许执行的操作?我正在寻找的是一个围绕 Javascript 的安全模型,它看起来像:
...
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript">
function AllowedToAccess()
{
}
function NotAllowedToAccess()
{
}
</script>
<security>
iframe {
Deny All;
Allow javascript:AllowedToAccess();
}
iframe script.untrusted {
Deny All;
}
</security>
<iframe src="trusted.html"></iframe>
<iframe src="http://www.somesite.com/trusted.html"></iframe>
...
两个 'trusted.html' 看起来像:
<html><body>
<script type="text/javascript">
function InternalCall()
{
window.parent.AllowedToAccess();
}
function InternalCall2()
{
window.parent.NotAllowedToAccess();
}
</script>
<security>
javascript:window.parent {
Allow javascript:document.body.offsetHeight;
Allow javascript:document.title;
}
script.untrusted {
Deny All;
}
</security>
<script type="text/javascript">
window.parent.AllowedToAccess();
InternalCall();
</script>
<script type="text/javascript" src="http://www.anothersite.com/untrusted.js" secclass="untrusted"></script>
<script type="text/javascript">
window.parent.NotAllowedToAccess();
InternalCall2();
window.parent.jQuery(window.parent.body).append('<div id="badid"></div>');
window.parent.jQuery('#badid').load('SomethingIShouldnt.php');
</script>
</body>
</html>
'SomethingIShouldnt.php' 看起来像:
NotAllowedToAccess();
'untrusted.js' 看起来像:
window.parent.AllowedToAccess();
InternalCall();
window.parent.NotAllowedToAccess();
InternalCall2();
window.parent.jQuery(body).append('<div id="badid"></div>');
window.parent.jQuery('#badid').load('SomethingIShouldn't.php');
(呃……抱歉我有点矫枉过正了。)
您将注意到 HTML 代码中不存在的“安全”标签。我正在考虑一些类似于 CSS 选择器的声明,并混合了一些类似 Apache 的安全语法来定义规则。(我没有使用 window.parent 规则,但它希望向阻止跨站点脚本的浏览器展示一个体面的解决方法,这真的很令人沮丧 - “我相信父窗口只能访问我的窗口的高度和标题”)。我希望这样的东西已经以某种形式存在(甚至是规范草案)。但恐怕答案是否定的。
这可以做到(甚至部分)吗?如果不是,那么我需要与谁交谈才能实施这样的事情(标准委员会或浏览器实施者)?当然,假设这甚至有任何意义?