富文本必须入库前和渲染前双重净化,仅靠strip_tags()或htmlspecialchars()无效,需用htmlpurifier等工具配置白名单、协议控制并校验css/js风险,数据库非信任边界。

富文本入库前必须净化,否则数据库就是XSS温床
不净化就存库,等于把攻击载荷永久固化。后续所有导出、API、邮件模板、管理后台预览,全都会触发二次污染。哪怕你前端用 DOMPurify 拦住了,后端一拼模板照样执行 <script>alert(1)</script>。
正确流程只有这一条:接收到 POST 数据 → 立即调用 HTMLPurifier::clean() 或 XssHtml::clean() → 存入数据库 → 渲染前再净化一次。
-
strip_tags()不行:它不处理属性,@#@#@#@#@#@#@#@#@#@0会原样入库 -
htmlspecialchars()不行:它把整个 HTML 当纯文本转义,<strong>加粗</strong>变成可见源码,富文本功能直接废掉 - 白名单必须显式配置
'HTML.Allowed',同时配'HTML.Forbidden'(如['script', 'iframe', 'object', 'embed']),双重保险 - 协议控制必须开:
'URI.AllowedSchemes' => ['http', 'https', 'mailto'],否则data:和javascript:会漏掉
渲染时再过一遍净化,别信“数据来自自己库就安全”
很多人只在入库时过滤,渲染时直接 echo $content —— 这是典型误区。数据库不是信任边界,它只是存储介质。一旦某次上线漏配、某次脚本直连绕过净化、或某次备份恢复未走净化流程,脏数据就进来了。
所以每次渲染前,哪怕数据来自自己数据库,也必须再调一次 $purifier->purify($raw)。这不是性能浪费,而是防御纵深。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
- PHP 中用
HTMLPurifier,记得设'Core.Encoding' => 'UTF-8',否则中文乱码或过滤失效 - 若用
XssHtml,注意它默认不校验style中的background-image: url(javascript:...),需手动开启'CSS.AllowTricky' => true并精确放行允许的 CSS 属性 - 图片
style被清空?不是 bug,是默认策略。要保留background-size,得加进'CSS.AllowedProperties'
DataTables 里显示富文本字段,千万别用 innerHTML
表格列如果直接绑定原始 HTML 字符串,DataTables 默认会当作 HTML 渲染 —— 这等于主动打开 XSS 入口。尤其当字段来自用户编辑、CMS 后台或第三方导入时,风险极高。
正确做法是用 columns.render 提取纯文本,或在服务端已净化的前提下,用 $.parseHTML() + node.innerText 安全提取内容。
- 避免正则删标签:
data.replace(/]*>/g, '')容易被<img src="x" onerror="alert(1)">绕过 - 不要依赖前端框架自动转义:Vue 的
v-text或 React 的{text}是安全的,但v-html或dangerouslySetInnerHTML必须确保输入已由后端净化 - 如果业务确实需要渲染有限 HTML(如支持
<strong></strong>、<a></a>),请在服务端完成净化后,再传给前端,而不是让前端承担过滤责任
微信小程序 rich-text 渲染前,必须做节点级清洗
rich-text 组件虽不执行 JS,但能渲染 <img src="x" onerror="...">、<a href="javascript:"></a>,且部分旧版客户端对 malformed HTML 容错极差,容易 crash。
不能直接把原始 HTML 字符串丢给 rich-text,必须先转换为结构化 nodes 数组,并在转换过程中剔除危险节点。
- 转换工具如
html-parser2+ 自定义 visitor,遇到script、iframe、onerror属性直接跳过 -
name字段只允许白名单:['div', 'p', 'strong', 'em', 'a', 'img', 'ul', 'ol', 'li'] -
attrs.href必须校验协议,非https?或mailto:的一律清空 - 图片
src建议统一走 CDN 鉴权 URL,避免直接暴露原始路径
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










