javascript - 如何在 iframe 中实现 Frame Buster Javascript

标签 javascript

我看到这段代码可以帮助解决 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 header 还是建议同时使用这两种方法?

最佳答案

为了便于讨论,Mallary 的页面是包含 <iframe> 的页面元素,Bob 的页面就是放在框架中的页面。

I didn't understand how does it solve the problem?

如果 Mallary 一开始就不能将 Bob 的页面保存在一个框架中,那么她就无法点击劫持 Bob 的页面。

当然,这确实要求clickjack 攻击完全依赖于运行JS 的Bob 页面,否则Mallary 可以sandbox所以它的 JavaScript 都没有运行。

why self == top will solve it ?

不是。

top.location = self.location;导致浏览器离开 Mallary 的页面并在浏览器顶层加载 Bob 的页面。

self == top阻止浏览器离开 Bob 的页面并在其位置加载 Bob 的页面:即它防止重新加载的无限循环。

Can I use the ALLOW-FROM header or the recommendation is to use both approach ?

X-Frame-Options是停止将页面加载到框架中的更有效且破坏性更小的方法。 A CSPX-Frame-Options 的更灵活的替代品.

我会使用它们而不是像这样的 JavaScript hacks。

关于javascript - 如何在 iframe 中实现 Frame Buster Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56730979/

相关文章:

javascript - 如何访问 nvd3 中 d3 图的 x 和 y 尺度?

javascript - 如何在 TideSdk 应用程序中去除窗口类似窗口的边框?

javascript - for循环中的数组与第二个for循环数组javascript合并

javascript - 如何显示 data-id 属性中选中的复选框

javascript - 单击父按钮单击时如何重置子输入的数据和 View ?

javascript - 如何映射一个对象?

javascript - 链接 getElementsByTagName 调用来遍历 DOM 来查找您需要的项目

javascript - Firefox 启动连接时无法将 WebRTC DataChannels 与 Chrome 一起使用

javascript - 用于更改 WebGL 中立方体旋转 Angular slider

javascript - 测量通过 RTCDataChannel 发送的数据量