作者:梦幻00草根_831 | 来源:互联网 | 2023-09-01 01:15
我花时间试图修复Veracode扫描缺陷CWE-80对网页中与脚本相关的HTML标签进行不正确的中和。
我要做的是对后端进行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
,
假设该行中的网址是
xhr.open("GET",url,true);
可能有一些恶意输入,然后该输入会在其响应页面中反映出来:
var blobUrl = windowUrl.createObjectURL(new Blob([xhr.response]));
SO blobUrl基于恶意响应可能是恶意的,因此:
doc.href = blobUrl;
可能是错误原因。
除此之外,您还使用文件名作为
if (filename) {
doc.download = filename;
}
如果您只是从请求中获取文件名而没有对文件名进行清理,这也会导致XSS。