原生JavaScript中的appendChild()方法可能會(huì)觸發(fā)Veracode的XXS(跨站腳本攻擊)檢查,如果你在使用這個(gè)方法時(shí)插入了來自不可信來源的、未經(jīng)適當(dāng)處理的字符串或DOM元素。為了解決這個(gè)問題,你應(yīng)該確保所有插入到DOM中的內(nèi)容都經(jīng)過適當(dāng)?shù)那逑春娃D(zhuǎn)義,以防止XSS攻擊。
解決方法:
對(duì)于字符串類型的內(nèi)容,使用textContent或者innerHTML之前,對(duì)字符串進(jìn)行轉(zhuǎn)義處理。
vardiv =document.createElement('div');
div.textContent= escapeHTML(userInput);// 用戶輸入需要轉(zhuǎn)義
document.body.appendChild(div);
functionescapeHTML(str) {
returnstr.replace(/&/g,'&')
.replace(/</g,'<')
.replace(/>/g,'>')
.replace(/"/g,'"')
.replace(/'/g,''');
}
對(duì)于動(dòng)態(tài)創(chuàng)建的DOM元素,可以先在內(nèi)存中創(chuàng)建并操作,然后再一次性地添加到文檔中,以減少跨站腳本攻擊的機(jī)會(huì)。
varfrag =document.createDocumentFragment();
vardiv =document.createElement('div');
div.textContent='安全的文本內(nèi)容';
frag.appendChild(div);
document.body.appendChild(frag);
如果你使用的是innerHTML,盡量不要直接將變量插入到這個(gè)屬性中,而是使用createElement和appendChild來構(gòu)建DOM。
總結(jié),要解決Veracode關(guān)于appendChild()的XXS問題,你需要確保所有插入到DOM中的內(nèi)容都是經(jīng)過清洗和轉(zhuǎn)義的,以防止XSS攻擊。