定义一个“有效的”。
虽然您提供的三个 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 的更多信息