xss库过滤后内容显示异常怎么办?

Good“洛熙 阅读 2

我用 xss 库对用户输入做了过滤,但有些正常内容也被转义了,比如 <div> 这种标签直接显示成文本了,不是渲染成 HTML。是不是我用法不对?

我是这样用的:

import { sanitize } from 'xss';
const cleanHtml = sanitize(userInput);
document.getElementById('preview').innerHTML = cleanHtml;

结果页面上直接显示 “<div>内容</div>”,而不是渲染出 div 元素。我只想防 XSS,不想把合法标签全干掉啊……

我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
Top丶培聪
你这个是白名单没配置好,xss默认只保留非常基础的标签。复制这个配置,保留常用html标签:

const options = {
whiteList: {
a: ['href', 'title', 'target'],
div: [],
span: [],
p: [],
br: [],
// 其他需要保留的标签...
},
stripIgnoreTag: true
};

const cleanHtml = sanitize(userInput, options);


这样
就能正常渲染了。需要保留哪些标签自己往whiteList里加就行,数组里是允许的属性。

另外提醒下,前端过滤只是最后一道防线,后端也必须做校验,不然就是裸奔。
点赞
2026-03-05 17:04