实施 Checkmarx 建议的点击劫持修复引入了高严重性客户端 DOM XSS 漏洞

Implementing Checkmarx suggested clickjacking fix introduces high severity Client DOM XSS vulnerability

我的组织已使用 Checkmarx 扫描我们的代码,并且检测到低严重性问题 旧版浏览器上的潜在点击劫持 由于 JavaScript 函数在 [=48] 上触发=] 图片点击事件.

我们已经实施了以下建议的修复:

<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);