我看到了这段代码,可以帮助解决iframe中的点击劫持问题
<style>
html { display : none; }
</style>
<script>
if( self == top ) {
document.documentElement.style.display = 'block';
} else {
top.location = self.location ;
}
</script>
我不知道它如何解决问题?为什么self == top
将解决它?
我可以使用ALLOW-FROM
标头还是建议同时使用两种方法?
答案 0 :(得分:1)
为了便于讨论,Mallary的页面是包含<iframe>
元素的页面,而Bob的页面是被放置在框架中的页面。
我不知道它如何解决问题?
如果无法将Bob的页面保留在框架中,那么她就无法对其进行点击。
当然,这确实要求clickjack攻击完全取决于Bob的页面上运行的JS,否则Mallary可以sandbox
来使用它,因此它的JavaScript都不会运行。
为什么
self == top
将解决它?
不是。
top.location = self.location;
使浏览器离开Mallary的页面,并将Bob的页面加载到浏览器顶层的位置。
self == top
停止浏览器离开Bob的页面并在其位置加载Bob的页面:即,它防止了无限的重新加载循环。
我可以使用ALLOW-FROM标头,还是建议同时使用两种方法?
X-Frame-Options
是一种将页面停止加载到框架中的更有效且破坏性较小的方法。 A CSP是X-Frame-Options
的更灵活替代。
我会使用它们而不是像这样的JavaScript黑客。