Есть ли способ ограничить то, что 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>
...
Оба «доверенных.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, но, надеюсь, он продемонстрирует достойный обходной путь для браузеров, блокирующих межсайтовый скриптинг, с которыми действительно сложно работать - «Я доверяю родительскому окну доступ только к высоте моего окна и название "). Я надеюсь, что нечто подобное уже существует в какой-то форме (даже черновик спецификации). Но я боюсь, что ответом будет «нет».
Можно ли это сделать (даже частично)? Если нет, то с кем мне нужно поговорить, чтобы реализовать что-то подобное (комитет по стандартам или разработчики браузеров)? Предполагая, конечно, это даже имеет какой-то смысл?