ASP.NET中的x-frame-option SAMEORIGIN和clickjacking

时间:2013-09-30 08:24:12

标签: javascript asp.net security iframe clickjacking

应用程序在允许加载到iframe时遇到问题。我已经阅读了很多关于它(和点击劫持)。 由于有必要将页面加载到具有相同来源的iframe中,因此我得出以下解决方案:

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

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

但是,我知道并非所有浏览器都支持此标头。所以,我想添加一些额外的javascript sollution。由于我不是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>

1 个答案:

答案 0 :(得分:1)

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

x-frame-options是要走的路,所以如果你添加了它,那么你应该在现代浏览器上保持安全,但你可以尝试this approach如果某个网站尝试使用它会显示警告信息阻止你的框架破坏者工作。