前端如何正确处理用户输入防止XSS攻击?
我在做一个评论功能,用户提交的内容要显示在页面上,但担心XSS漏洞。比如用户输入了alert(1),直接innerHTML就会执行,这太危险了。
我试过用DOMPurify库清理,但有些场景又需要保留部分HTML(比如加粗和链接),结果配置起来很混乱。有没有更稳妥又简单的方式?
比如下面这段代码,怎么改才能既安全又能支持有限的富文本?
function renderComment(text) {
const div = document.createElement('div');
div.innerHTML = text; // 这里明显不安全
document.body.appendChild(div);
}
textContent处理纯文本,需要支持富文本的话,DOMPurify配置个白名单就行。记得把需要的标签和属性都加到白名单里,别嫌麻烦,安全第一。唉,前端安全真够折腾人的。
如果只需要显示用户输入的文本,别用innerHTML:
如果确实要保留部分HTML标签(加粗、链接、斜体这些),用DOMPurify配白名单:
复制这个配置,script标签、onclick、onerror这些危险的东西会被直接过滤掉,但加粗、斜体、链接会保留。
后端也必须做一遍过滤,别全靠前端。前端防不住故意构造的请求。DOMPurify是业界标准,别自己写正则替换,那玩意儿早晚有漏洞。