应用程序在允许加载到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>
答案 0 :(得分:1)
self
是当前页面,如果它等于top
这是最外面的框架页面,那么逻辑是它不在一个框架中所以一切正常。如果不是,则将最外面的帧的位置设置为当前页面(top.location = self.location;
)。这被称为“帧破坏者”代码,但也有一些已发布的“frame buster buster”脚本打破了阻止内容被框架化的尝试,因此请记住,您的JavaScript可能并不总是有效。
x-frame-options
是要走的路,所以如果你添加了它,那么你应该在现代浏览器上保持安全,但你可以尝试this approach如果某个网站尝试使用它会显示警告信息阻止你的框架破坏者工作。