2014-05-01 21 views
1

我们的代码中有一个问题,以前的开发人员试图将预防性措施用于框架破坏(停止点击劫持),这是一个术语,我没有打开关于。无论如何,他们将以下代码放在我们所有的.aspx页面的顶部,甚至不在其上面的head元素内。框架破坏JavaScript代码 - 执行顺序

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

因此很明显,它是安全的重要问题是,我们正在一个问题,因为上面theBody是不确定的,因为身体标签尚未加载。因此,要停止js代码中断,我们将上面的脚本剪切并粘贴到页面的底部。这是一种修复。我们只是想知道这种方法是否使代码的真正原因无效。任何人都可以给我一些建议吗?

回答

2

防止点击劫持是输出X-Frame-Options响应头用一个合适的值的最有效方法,如DENY

X框-选项:DENY

浏览器检查该并会根据值阻止该页面被框住。

帧破坏JavaScript用于不支持X-Frame-Options标头(例如IE7及更低版本)的旧浏览器的后退。

至于你的身体错误,body元素只有在浏览器在HTML中解释它并在DOM中创建它后才可用。这就是您的代码在body标签之前执行时显示错误的原因。您必须向开发人员询问为什么他们将此代码设置为display:block。默认情况下,你的CSS可能是display:none

+0

谢谢MrCode。你知道如何执行'X-Frame-Options:DENY' – user3036965

+0

你可以在你的Web.config中配置它,这里有一个例子:https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options#Configuring_IIS – MrCode

+0

谢谢你在这里的所有建议。真的很有用的东西。全部解决。 – user3036965

3

我在研究相同的东西,发现了这些附加信息。指定选项DENY将防止页面被构筑。如果我们想在同一来源的另一个网页中构建页面,我们可以使用SAMEORIGIN选项。同一来源意味着具有相同的URI方案,主机名和端口号。但是,如果您的域上有任何接受任意网址的网页,则不要使用相同原产地。它将无法缓解攻击。有关更多详细信息,请参阅this文章。

+1

只是为了详细说明您的最后一点,我可以引用方案:将配置设置为您网站的SAMEORIGIN。在你网站的任何页面上,假设我们有两个IFrame。一个IFrame托管自己网站的另一个页面,第二个IFrame托管外部/第三方的网站页面。在这种情况下,外部/第三方网页可以利用这一事实,并可能导致clickJack攻击,因为两个IFrame位于同一父页面上。如果您的网站上存在这种情况,则应使用DENY选项而不是SAMEORIGIN。 – RBT

+0

感谢Rasik的阐述:) –