1

我们的代码中有一个问题,以前的开发人员试图采取预防措施来阻止点击劫持(阻止点击劫持),这是一个我不喜欢的术语。无论如何,他们将以下代码放在我们所有.aspx页面的顶部,甚至不在其head上方的元素内。

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

因此,显然对于安全性很重要,问题是我们遇到了一个问题,因为theBody上面的内容是未定义的,因为 body 标签尚未加载。因此,为了停止js代码中断,我们将上述脚本剪切并粘贴到页面底部。这是一种修复。我们只是想知道这种方法是否会使最初拥有代码的实际原因无效。有人可以给我一些建议吗?

4

3 回答 3

2

防止 Clickjacking 最有效的方法是输出X-Frame-Options具有合适值的响应头,例如DENY

X-Frame-选项:拒绝

浏览器会对此进行检查,并根据值阻止页面被框起来。

框架破坏 JavaScript 被用作不支持X-Frame-Options标头的旧浏览器(例如 IE7 和更低版本)的后备。

至于你的 body 错误,只有在浏览器在 HTML 中解释它并在 DOM 中创建它之后,body 元素才可用。这就是为什么您的代码在 body 标记之前执行时会显示错误的原因。您将不得不询问开发人员为什么他们display:block使用此代码设置正文。也许身体display:none默认在你的 CSS 中?

于 2014-05-01T13:34:35.477 回答
2

我正在研究相同的内容并发现了这些附加信息。指定选项 DENY 将阻止页面被加框。如果我们想在同源的另一个网页中构筑一个页面,我们可以使用 SAMEORIGIN 选项。同源意味着具有相同的 URI 方案、主机名和端口号。但是,如果您的域中有任何页面接受任意 URL 来构建框架,请不要使用 SAME ORIGIN。它将无法减轻攻击。有关更多详细信息,请参阅本文

于 2016-01-28T08:53:00.910 回答
0

好吧,正如其他人正确解释的那样,“X-Frame-Options”响应标头将是处理它的有效方法。但是,如果您想将帧突发代码作为后备,您可以在 HEAD 元素中执行此操作。

  1. 先应用样式
  2. 根据当前窗口是否是最上面的窗口,删除或保留样式(知道页面是否被框架的方法)

<head>
    <!-- other tags -->
    <style id="theBody">
      body{display:none !important;}
    </style>
    <script type="text/javascript">
      if (self === top) {
        var theBody =document.getElementById("theBody");
        theBody.parentNode.removeChild(theBody);
      } else {
        top.location = self.location;
      }
    </script>   
</head>

于 2021-08-09T07:34:32.613 回答