Javascript x-frame-option在ASP.NET中启动并单击Jacking

Javascript x-frame-option在ASP.NET中启动并单击Jacking,javascript,asp.net,security,iframe,clickjacking,Javascript,Asp.net,Security,Iframe,Clickjacking,应用程序在允许加载到iframe时遇到问题。我已经读了很多关于它(和点击劫持)。 由于有必要将具有相同原点的页面加载到iframe中,因此我采用了以下解决方案: 将以下内容添加到global.asax文件中 HttpContext.Current.Response.AddHeader("x-frame-options", "SAMEORIGIN") 但是,我知道并非所有浏览器都支持此标题。因此,我想添加一些额外的javascript解决方案。由于我不是javascript专家,我发现了以下解决

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

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

HttpContext.Current.Response.AddHeader("x-frame-options", "SAMEORIGIN")
但是,我知道并非所有浏览器都支持此标题。因此,我想添加一些额外的javascript解决方案。由于我不是javascript专家,我发现了以下解决方案:

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

如果(self==top){
var theBody=document.getElementsByTagName('body')[0]
theBody.style.display=“块”
}否则{
top.location=self.location
}    
我知道如果一个人非常想要它,它可以被阻止,但是,这会增加一些额外的安全性

我的问题是— 1) 我不理解这个javascript代码的逻辑(你能给我一些关于hte逻辑的评论吗) 2) 如果这在SAMEORIGIN中起作用(允许在同一页面中加载iframe,但不允许在其他页面上加载iframe)

编辑:

我发现了另一种方法,我似乎很清楚,但我不确定这是否比上述方法更安全:

<style>html { visibility : hidden }</style>
<script>
    if (self == top ) {
        document.documentElement.style.visibility = 'visible';
    } else {
        top.location = self.location;
    }
</script>
html{可见性:隐藏}
if(self==顶部){
document.documentElement.style.visibility='visible';
}否则{
top.location=self.location;
}

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


x-frame-options
是一个不错的选择,因此如果您添加了这一点,那么您在现代浏览器上应该是安全的,但您可以尝试在站点试图停止frame buster工作时显示警告消息。

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


x-frame-options
是一个不错的选择,因此如果你添加了这一点,那么你在现代浏览器上应该是安全的,但是你可以尝试一下,如果网站试图阻止你的frame-buster工作,它会显示一条警告消息。

我知道x-frame-options。如果我想在同一个页面中使用框架,这个“框架破坏者”代码是否会产生一些问题?(同一起源)?@renathy你可以添加逻辑,以避免自己的框架崩溃。您将能够从框架外部访问和检查变量,因为它是同一来源。很抱歉,我不理解您最后的评论。我不需要访问或检查任何变量。我有一个不是我写的退出应用程序。我只需要在其中插入注释中的第二个代码块(包括html{visibility:hidden})。我想知道这是否会产生任何问题(应用程序自身中有iframe指向该应用程序中的表单-因此x-frame-options设置为SAMEORIGIN,但如果没有造成任何损坏,也应该插入js代码)。如果IFrame位于您的页面内,则它取决于页面内容和框架页面的标题,以确定是否可以对其进行框架设置。如果上面的脚本在你的页面中,那么它不会影响你的页面。那么给定的代码中哪一个更好?第一个还是第二个(具有可见性)。对我来说,第二个代码似乎更难克服,因为页面是不可见的。我知道x-frame-options。如果我想在同一个页面中使用框架,这个“框架破坏者”代码是否会产生一些问题?(同一起源)?@renathy你可以添加逻辑,以避免自己的框架崩溃。您将能够从框架外部访问和检查变量,因为它是同一来源。很抱歉,我不理解您最后的评论。我不需要访问或检查任何变量。我有一个不是我写的退出应用程序。我只需要在其中插入注释中的第二个代码块(包括html{visibility:hidden})。我想知道这是否会产生任何问题(应用程序自身中有iframe指向该应用程序中的表单-因此x-frame-options设置为SAMEORIGIN,但如果没有造成任何损坏,也应该插入js代码)。如果IFrame位于您的页面内,则它取决于页面内容和框架页面的标题,以确定是否可以对其进行框架设置。如果上面的脚本在你的页面中,那么它不会影响你的页面。那么给定的代码中哪一个更好?第一个还是第二个(具有可见性)。对我来说,第二个代码似乎更难克服,因为页面是不可见的。