我们正在使用 X-Frame-Options 标头以及本页描述的 JS/CSS 设置来实现点击劫持保护:
https://www.owasp.org/index.php/Clickjacking_Defense_Cheat_Sheet
作为参考,JS/CSS 解决方案如下所示:
<style id="antiClickjack">body{display:none !important;}</style>
<script type="text/javascript">
if (self === top) {
var antiClickjack = document.getElementById("antiClickjack");
antiClickjack.parentNode.removeChild(antiClickjack);
} else {
top.location = self.location;
}
</script>
鉴于所有现代浏览器都广泛支持 X-Frame-Options 标头,我想知道我们是否应该保留 JS 框架杀手。也许只是为了好衡量?如果这样做,我们需要注意的是,我们使用 colorbox 从我们自己的域中生成 iframe 弹出窗口。这可以通过将其设置为 SAMEORIGIN 来容纳在 X-Frame-Options 标头中,但我不知道如何修改 JS 以允许来自同一域的帧而不会轻易绕过它。
实际上,如果它们相同,脚本会比较self === top
并从正文样式中删除它们。display:none;
我可以修改条件以检查域,如下所示:
if (self === top || this.top.location.hostname === 'www.example.com')
但这使用了location
可以从框架页面更改的对象,有效地绕过了脚本。基本上,我在这里寻找类似于这个被否决的建议的东西:
https://stackoverflow.com/a/21900420/998048
所以,2个问题:
1.) 用 JS 实现帧杀是否仍然被认为是最佳实践,甚至是必要的?
2.) 如果是这样,是否有更好、更安全的方法来保持 JS 就位但仍允许来自我们自己域的帧?