我正在努力加强我们的应用程序以应对跨框架脚本/点击劫持攻击。我们的应用程序托管在 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
值吗?通过这种方式,我将能够确保它始终只是来自构建我们应用程序的同一高级域的父站点。寻找一些关于正则表达式编码的帮助。这种方法合理吗?