Streamdown基于harden-react-markdown构建,通过以下多层防护确保渲染安全:
- 默认HTML过滤:自动转义原生HTML标签,防止script标签等危险内容执行
- 属性白名单:对于允许的HTML元素(如a标签),仅保留href、title等安全属性
- 链接验证:自动为所有外部链接添加rel=’noopener noreferrer’防止钓鱼攻击
高级安全配置:
- 通过components参数重写渲染器,强制所有链接添加target=’_blank’:
components={{ a: ({href, children}) => <a href="/en/{href}/" target="’_blank’" rel="’noreferrer’">{children}</a> }} - 使用remark-plugins添加内容过滤(如移除图片标签):
import { remark } from ‘remark’
import filter from ‘remark-html-filter’
remark().use(filter, {allowedTags: [‘p’, ‘code’]}) - 对用户输入内容预先进行DOMPurify处理
This answer comes from the articleStreamdown:专为 AI 流式响应设计的 Markdown 渲染组件The