Javascript:网页中脚本相关 HTML 标签的不当中和(基本 XSS)

Javascript: Improper Neutralization of Script-Related HTML Tags in a Web Page (Basic XSS)

我正在花时间尝试修复 veracode 扫描缺陷 CWE-80 不正确中和脚本相关的 HTML 网页中的标签(基本 XSS)。

我所做的是对我的后端进行 HTTP 调用,以打开包含下载文件的 blob。

    const xhr = new XMLHttpRequest();
    xhr.open("GET", url, true);
    xhr.responseType = "arraybuffer";
    xhr.onreadystatechange =  () => {
        if (xhr.readyState === 4 && xhr.status === 200) {
            var windowUrl = window.URL || window.webkitURL;
            var blobUrl = windowUrl.createObjectURL(new Blob([xhr.response]));
            const doc = document.createElement('a');
            document.body.appendChild(doc);
            doc.href = blobUrl;
            if (filename) {
                doc.download = filename;
            }
            doc.click();
            windowUrl.revokeObjectURL(url);
        }
    }
        xhr.send();

veracode 抱怨这一行

document.body.appendChild(doc);

对 Node.appendChild() 的调用包含跨站点脚本 (XSS) 漏洞。该应用程序使用不受信任的输入填充 HTTP 响应,允许攻击者嵌入恶意内容,例如 Javascript 代码,这些内容将在受害者浏览器的上下文中执行。 XSS 漏洞通常被用来窃取或操纵 cookie、修改内容的呈现以及破坏机密信息,并且会定期发现新的攻击媒介。

不确定我需要申请什么样的验证。

这是一个相当复杂的主题,第一道防线应该是在使用这样的工具将 HTML 添加到页面之前对其进行清理。

https://github.com/jitbit/HtmlSanitizer

维基百科对不同的预防技术进行了很好的总结。

https://en.wikipedia.org/wiki/Cross-site_scripting#Preventive_measures

他们也是这个关于 XSS 预防的伟大备忘单

https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html

假设 url 行:

xhr.open("GET", url, true);

可能有一些恶意输入,然后该输入可以反映在其响应页面中:

var blobUrl = windowUrl.createObjectURL(new Blob([xhr.response]));

SO blobUrl 基于恶意响应可能是恶意的:

doc.href = blobUrl;

可能是错误的原因。

除此之外,您还使用了文件名

if (filename) {
            doc.download = filename;
        }

如果您只是从请求中获取文件名并在不对其进行清理的情况下使用它,这也可能导致 XSS。