我在我们的项目中使用 append() 以及 html(),Checkmarx 用于扫描漏洞,它报告 XSS 漏洞,所以我尝试使用纯 javascript(方法 1)创建元素以及DOMPurify 库(方法 2)。
这里是示例代码:
Ajax API 调用
$('.ktcproduct').change(function(){
$.ajax({
url: "/api/v1/raw/ktc_status/",
type: "POST",
data: {'product': productName},
success: function (data) {
ktcproduct_render(data)
},
error: function (data) {
if (checkError(data)[0] == true){
anim4_noti(checkError(data)[1])
}
})
原文:
function ktcproduct_render(data){
for (var product = 0; product<data.length; product ++){
var tag = "<option value='"+data[product]+"'>"+data[product]+"</option>"
$('.sourcedate').append(tag)
}
}
我试过以下两种方法。
方法一:
function ktcproduct_render(data){
var sourcedate = document.getElementsByClassName("sourcedate");
for (var product = 0; product<data.length; product ++){
var opt = document.createElement('option');
opt.value = sourceDTList[dt]
opt.text = sourceDTList[dt]
sourcedate[0].appendChild(opt)
}
}
方法二:
function purifyDOM(tag){
var dom_purify = DOMPurify.sanitize(tag, {ALLOWED_TAGS: ['tr', 'th', 'td', 'a', 'div', 'table', 'option', 'html', 'i']})
return dom_purify
}
function ktcproduct_render(data){
for (var product = 0; product<data.length; product ++){
var tag = "<option value='"+data[product]+"'>"+data[product]+"</option>"
var cleaned_tag = purifyDOM(tag)
$('.sourcedate').append(cleaned_tag)
}
}
但 Checkmarx 仍然将 ajax 响应(API 调用中的“数据”)称为漏洞。
来自Checkmarx扫描报告的信息:
应用程序的 ktcproduct_render 在生成的输出中嵌入不受信任的数据,在第 1578 行追加 webapp/ktc_app/static/assets/js/customjs.js。这种不受信任的数据直接嵌入到输出中,没有 适当的清理或编码,使攻击者能够将恶意代码注入输出。
如何清理 ajax 响应??还有其他建议吗??