【发布时间】:2016-02-01 20:51:27
【问题描述】:
我正在努力强化我们的应用程序以应对跨框架脚本/点击劫持攻击。我们的应用程序托管在 iframe 内的多个不同父站点下。这些父站点中的每一个都共享相同的高级域名(例如 *.foo.com)。我希望能够确保父框架站点始终与我们的应用程序域相同。例如:
父网站:apple.foo.com、pear.foo.com、banana.foo.com 我们的网站:mysite.foo.com
我知道我可以通过 Javascript 执行类似的操作,但出于可移植性原因,我不希望将我们的域名嵌入代码中。
<script type="text/javascript">
var topFrameHostname = "";
try
{
topFrameHostname = top.location.hostname;
}
catch (err)
{
topFrameHostname = "";
}
if (self !== top && document.referrer.match(/^https?:\/\/([^\/]+\.)?foo\.com(\/|$)/i)) == null &&
topFrameHostname != self.location.hostname)
{
top.location = self.location;
}
else
{
var antiClickjack = document.getElementById("antiClickjack");
antiClickjack.parentNode.removeChild(antiClickjack);
}
</script>
所以我的问题是我可以使用正则表达式来比较top.location 和self.location 值中的域名吗?通过这种方式,我将能够确保它始终只是来自构建我们应用程序的同一高级域的父站点。寻找一些关于正则表达式编码的帮助。这种方法合理吗?
【问题讨论】:
-
首先阅读
Same Origin Policy。最好使用X-Frame标头而不是正则表达式。 -
X-FRAME-OPTION SAMEORIGIN 的问题(无论如何我都理解)它只适用于相同的域名。所以在我上面的例子中,它只有在父母和孩子都是 mysite.foo.com 时才有效。它不适用于共享同一根域 (*.foo.com) 的多个站点。
标签: javascript regex clickjacking