Javascript:网页中与脚本相关的HTML标记的不正确中和(基本XSS)

Javascript:网页中与脚本相关的HTML标记的不正确中和(基本XSS),javascript,xmlhttprequest,xss,owasp,veracode,Javascript,Xmlhttprequest,Xss,Owasp,Veracode,我正在花时间试图修复veracode扫描缺陷CWE-80,该缺陷不正确地中和了网页中与脚本相关的HTML标记(基本XSS) 我所做的是对我的后端进行HTTP调用,以便打开带有下载文件的blob const xhr = new XMLHttpRequest(); xhr.open("GET", url, true); xhr.responseType = "arraybuffer"; xhr.onreadystatechange = () => {

我正在花时间试图修复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,然后再使用类似的工具将其添加到页面中

维基百科对不同的预防技术有一个很好的总结

他们的这篇文章也是关于XSS预防的一大秘籍

假设url在第行:

xhr.open("GET", url, true);
可能有一些恶意输入,然后该输入可以反映在其响应页面的第行:

var blobUrl = windowUrl.createObjectURL(new Blob([xhr.response]));
因此,基于恶意响应,blobUrl可能是恶意的,因此:

doc.href = blobUrl;
可能是错误的原因

除此之外,您还将文件名用作

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

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

您是如何解决此问题的?