问题描述
我的组织已使用 Checkmarx 扫描了我们的代码,并且检测到了低严重性问题旧浏览器上的潜在点击劫持,原因是 JavaScript 函数在 HTML 图像点击事件上触发。
我们已实施以下建议修复:
-
在服务器上定义并实施内容安全策略 (CSP) 边,包括一个frame-ancestors指令(frame-ancestors 'self')
-
“x-frame-options”标头设置为“SAMEORIGIN”
<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 漏洞的风险,请对 self.location 进行 URL 编码
top.location = encodeURI(self.location);