React里用dangerouslySetInnerHTML怎么防XSS?

设计师艺诺 阅读 4

我在用 React 渲染后台返回的富文本内容,必须用 dangerouslySetInnerHTML,但担心用户输入里有恶意脚本。试过直接插入,结果页面真被注入了 alert,这咋办?

有没有轻量又靠谱的方案?比如能不能在塞进去之前先过滤一下标签?我看到有人用 DOMPurify,但不确定在 React 里怎么配合用。

比如我现在是这么写的:

const RichText = ({ content }) => (
  <div dangerouslySetInnerHTML={{ __html: content }} />
);

如果加上 DOMPurify,是不是改成这样就行?

import DOMPurify from 'dompurify';

const RichText = ({ content }) => {
  const cleanHTML = DOMPurify.sanitize(content);
  return <div dangerouslySetInnerHTML={{ __html: cleanHTML }} />;
};

这样真的能防住 XSS 吗?会不会有性能问题或者漏掉某些攻击方式?

我来解答 赞 3 收藏
二维码
手机扫码查看
1 条解答
妍妍🍀
对,就这么写,DOMPurify 是目前最靠谱的方案。别自己写正则去过滤标签,全是坑,用它洗一遍数据就搞定了。
点赞
2026-03-01 11:01