1

该应用程序在允许加载到 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>

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

我的问题是 - 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>
4

1 回答 1

1

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

x-frame-options是要走的路,所以如果你已经添加了,那么你应该在现代浏览器上是安全的,但是你可以尝试这种方法,如果一个站点试图阻止你的框架破坏器工作,它会显示一条警告消息。

于 2013-09-30T14:08:59.590 回答