登录
首页 >  文章 >  前端

如何安全过滤HTML危险代码

时间:2025-12-13 18:36:36 165浏览 收藏

推广推荐
免费电影APP ➜
支持 PC / 移动端,安全直达

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《如何过滤HTML中的危险代码》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

应使用白名单机制的HTML清理库、服务端HTML解析与节点遍历过滤、正则预处理+语义校验组合过滤三种方法。其中白名单机制最安全,通过解析DOM重建仅保留允许标签与属性;服务端解析逐节点校验并剔除不合规内容;正则预处理仅作辅助,不可单独依赖。

如何过滤html_过滤HTML中的无效或危险代码【危险】

如果您需要从HTML内容中移除潜在的无效标签、未闭合结构或可执行脚本等危险代码,则可能是由于直接渲染用户输入导致XSS风险或解析异常。以下是过滤HTML中无效或危险代码的多种方法:

一、使用白名单机制的HTML清理库

该方法通过预定义允许的标签、属性及值范围,仅保留安全子集,彻底剥离script、onerror、javascript:等高危元素。核心逻辑是解析DOM后重建,而非正则替换。

1、引入开源库如jsoup(Java)、html-sanitizer(Google)、DOMPurify(JavaScript)或bleach(Python)。

2、配置白名单:明确指定允许的标签(如p、strong、em、a),允许的属性(如href、class),并限制href值必须以http://、https://或/开头。

3、调用清理函数处理原始HTML字符串,例如DOMPurify.sanitize(dirtyHtml)返回净化后的HTML。

4、对返回结果进行二次校验,确保输出中不存在任何

二、服务端HTML解析与节点遍历过滤

该方法借助标准HTML解析器构建DOM树,逐节点判断类型与属性,递归剔除不合规节点,避免正则误删或绕过。

1、使用服务端解析器(如Python的lxml.html、Node.js的jsdom、Java的Jsoup)加载原始HTML。

2、遍历所有元素节点,检查tagName是否在安全列表中;若不在,调用drop_tree()或remove()彻底删除该节点及其子树。

3、对保留节点的每个属性进行校验:删除所有以“on”开头的属性名,对href和src属性验证协议白名单,禁止data:、vbscript:等伪协议。

4、序列化净化后的DOM为字符串,确保最终输出不包含任何被移除节点残留的文本内容或注释片段

三、正则预处理+语义校验组合过滤

该方法适用于轻量级场景或无法引入解析器的环境,先用正则快速剥离明显危险模式,再结合简单语义规则补漏,但不可单独依赖正则。

1、使用正则表达式全局替换

2、匹配并清除所有on\w+\s*=\s*["'][^"']*["']形式的内联事件属性,以及javascript:、vbscript:、data:开头的href/src值。

3、对剩余HTML执行基础配对校验:统计数量是否相等,检查常见标签(如div、span、p)是否成对出现,对未闭合标签添加缺失的结束符或截断后续内容。

4、执行完毕后,人工抽检输出中是否存在双写标签(如)、编码绕过(如