实施 Checkmarx 建议的点击劫持修复引入了高严重性客户端 DOM XSS 漏洞
Implementing Checkmarx suggested clickjacking fix introduces high severity Client DOM XSS vulnerability
我的组织已使用 Checkmarx 扫描我们的代码,并且检测到低严重性问题 旧版浏览器上的潜在点击劫持 由于 JavaScript 函数在 [=48] 上触发=] 图片点击事件.
我们已经实施了以下建议的修复:
在服务器上定义并实施内容安全策略 (CSP)
边,包括一个 frame-ancestors 指令 (frame-ancestors 'self')
"X-Frame-Options" header 设置为 "SAMEORIGIN"
需要旧版浏览器支持,因此在 Checkmarx 文档中添加了一个类似于以下示例的 frame-busting 脚本:
<html>
<head>
<style> html {display : none; } </style>
<script>
if ( self === top ) {
document.documentElement.style.display = 'block';
}
else {
top.location = self.location;
}
</script>
</head>
<body>
<button onclick="clicked();">Click here if you love ducks</button>
</body>
</html>
现在 Checkmarx 将文件标记为高严重性问题 Client DOM XSS 由于以下行:
top.location = self.location;
建议添加以保护传统点击插孔。
因此,如果我们实施 Checkmarx 建议的解决低严重性问题(旧版浏览器上的潜在点击劫持),我们会引入高严重性问题(客户端 DOM XSS)。
正确的做法是什么?
为了降低 Web 应用程序中出现 DOM-based cross-site scripting 漏洞的风险,URL 对 self.location
进行编码
top.location = encodeURI(self.location);
我的组织已使用 Checkmarx 扫描我们的代码,并且检测到低严重性问题 旧版浏览器上的潜在点击劫持 由于 JavaScript 函数在 [=48] 上触发=] 图片点击事件.
我们已经实施了以下建议的修复:
在服务器上定义并实施内容安全策略 (CSP) 边,包括一个 frame-ancestors 指令 (frame-ancestors 'self')
"X-Frame-Options" header 设置为 "SAMEORIGIN"
需要旧版浏览器支持,因此在 Checkmarx 文档中添加了一个类似于以下示例的 frame-busting 脚本:
<html>
<head>
<style> html {display : none; } </style>
<script>
if ( self === top ) {
document.documentElement.style.display = 'block';
}
else {
top.location = self.location;
}
</script>
</head>
<body>
<button onclick="clicked();">Click here if you love ducks</button>
</body>
</html>
现在 Checkmarx 将文件标记为高严重性问题 Client DOM XSS 由于以下行:
top.location = self.location;
建议添加以保护传统点击插孔。
因此,如果我们实施 Checkmarx 建议的解决低严重性问题(旧版浏览器上的潜在点击劫持),我们会引入高严重性问题(客户端 DOM XSS)。
正确的做法是什么?
为了降低 Web 应用程序中出现 DOM-based cross-site scripting 漏洞的风险,URL 对 self.location
进行编码top.location = encodeURI(self.location);