0

我正在运行 webinspect 应用程序来检测我的应用程序上的安全威胁。检测到的威胁之一是(跨帧脚本),我通过将(X-Frame-Options)标头添加为(SAMEORIGIN)来修复它。现在,当我重新运行 webinspect 时,它仍然检测到(跨帧脚本)并报告以下消息:

在框架内加载此页面时未观察到有效的框架破坏技术

我使用了很多块破坏代码,但同样的问题仍然存在。我尝试了以下块杀手:

第一次尝试:

 <style> html{display:none;} </style> 
   <script>    
    if(self == top) {
    document.documentElement.style.display = 'block';} 
    else {
    top.location = self.location; } 
</script>

第二次尝试:

if (top != self) { top.location.replace(self.location.href); }

第三次尝试:

if(top.location!=self.locaton) {
  parent.location = self.location;
}
4

1 回答 1

0

定义一个“有效的”。

虽然您提供的三个 JavaScript 片段确实有效,但您是否找到了阻止这种情况的方法?

例如,在 iframe(攻击者可以控制)中,添加带有空值的沙箱属性:

<iframe src="Inner.html" sandbox="">

iframe 文档

这是我做的一个示例测试:

外层.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Outer Html</title>
    </head>
    <body>
        <h1>Outer Html</h1>
        <p>
            Outer Html
        </p>
        <iframe src="Inner.html" width="400" height="300" sandbox="">
            <p>Your browser does not support iframes.</p>
        </iframe>
    </body>
</html>

内部.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Inner Html</title>
   <script>    
    if (top != self) { top.location.replace(self.location.href); }
</script>
    </head>
    <body>
        <h1>Inner Html</h1>
        <p>
            Inner Html
        </p>
    </body>
</html>

X 框架选项

如果您使用X-Frame-Options和 JavaScript 代码来确保您不在框架中,为什么不将值设置为DENY而不是SAMEORIGIN

由于SAMEORIGIN您的攻击面较小,只有 iframe 来自您的站点才会成功(可能存在另一个漏洞)。如果您不打算在您的网站上使用 iframe,您不妨选择更安全的X-Frame-Options: DENY.

我认为这就是 HPE Fortify WebInspect 的预期。

内容安全策略 (CSP) 框架祖先指令

另一种选择是frame-ancestors在 HTTP 标头“Content-Security-Policy”中使用具有“none”值的指令。这将阻止(在支持的浏览器中)任何域构建内容。除非确定了特定的取景需要,否则建议使用此设置。

资源丰富

您可以在OWASP 的 Clickjacking Defense Cheat Sheet中找到有关预防 Clickjacking 的更多信息

于 2016-11-01T14:03:56.680 回答