javascript - ASP.NET 中的 x-frame-option SAMEORIGIN 和点击劫持

标签 javascript asp.net security iframe clickjacking

应用程序在允许加载到 iframe 中时出现问题。我读过很多相关内容(以及点击劫持)。 由于需要将同源的页面加载到iframe中,所以我得出了以下解决方案:

将以下内容添加到 global.asax 文件

HttpContext.Current.Response.AddHeader("x-frame-options", "SAMEORIGIN")

但是,我知道并非所有浏览器都支持此 header 。所以,我想添加一些额外的 javascript 解决方案。由于我不是 javascript 专家,我找到了以下解决方案:

<script>    
    if (self == top) {        
        var theBody = document.getElementsByTagName('body')[0]        
        theBody.style.display = "block"        
    } else {        
        top.location = self.location        
    }    
</script>

我知道如果有人非常想要它,它可能会被阻止,但是,这会带来一些额外的安全性。

我的问题是 - 1)我不明白这段javascript代码的逻辑(你能给出一些关于hte逻辑的评论吗) 2)如果这在 SAMEORIGIN 中有效(允许在同一页面中加载 iframe,但不允许在其他页面上加载)?

编辑:

我找到了另一种对我来说似乎很清楚的方法,但是,我不确定这是否比上面更安全:

<style>html { visibility : hidden }</style>
<script>
    if (self == top ) {
        document.documentElement.style.visibility = 'visible';
    } else {
        top.location = self.location;
    }
</script>

最佳答案

self 是当前页面,如果它等于 top (最外面的框架页面),那么逻辑是它不在框架中,所以一切没问题。如果不是,它将最外层框架的位置设置为当前页面 (top.location = self.location;)。这被称为“frame buster”代码,但也有一些已发布的“frame buster buster”脚本会破坏阻止内容被框架化的尝试,因此请记住,您的 JavaScript 可能并不总是有效。

x-frame-options 是正确的方法,所以如果您添加了它,那么您在现代浏览器上应该是安全的,但您可以尝试 this approach如果某个网站试图阻止您的 Frame Buster 工作,它将显示一条警告消息。

关于javascript - ASP.NET 中的 x-frame-option SAMEORIGIN 和点击劫持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19089548/

相关文章:

javascript - 异步 Promise 阻塞 DOM

.net - 如何从与声明变量的 block 不同的代码块表达式中访问变量?

jquery - JAX-RS 只需要检查授权

Android如何处理内存中的敏感数据

暴露电子邮件地址和用户名的安全风险?

javascript - 使用嵌套值过滤数组给我 undefined

javascript - ajax jquery 总是运行错误;

javascript - 选择列表项的前半部分和后半部分

c# - 所需关键字的正则表达式?

javascript - 为什么隐藏字段值不会更新