我有以下代码
nver+="<SPAN CLASS=focusField>"+text.substring(start,end)+"</SPAN>";
if(text.length>end)
nver+=text.substring(end,text.length);
results.innerHTML=nver.replace(/[\n]/g,"<BR>");
因此文本变量被篡改
textarea:ABCD"> < img/src='x'onerror=alert('XSS')>
第一text.substring(start,end)
已输出'textarea'
和text.substring(end,text.length)
还有剩余:ABCD">< img/src='x'onerror=alert('XSS')>
如何应对此 XSS?有什么方法可以使用 createtextnode 或某些功能来解决这个问题吗?如果是这样,我该如何使用 createtextnode
来做到这一点? ?
最佳答案
您需要对输出进行 HTML 编码
function htmlEscape(str) {
return String(str)
.replace(/&/g, '&')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/</g, '<')
.replace(/>/g, '>');
}
nver+=text.substring(end,text.length);
// HTML encode (i.e. escape the nver variable for correct output)
nver = htmlEscape(nver);
results.innerHTML=nver.replace(/[\n]/g,"<BR>");
查看 DOM based XSS Prevention Cheat Sheet了解更多提示。
关于javascript - 防止innerHTML属性中的XSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25933160/