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