HTML属性清理的关键细节讲解

夏强吖_8430

夏强吖_8430

2026-11-15

221人浏览

原创

HTML属性清理需保留alt、href、src、data-、role、aria-、type等必需属性以保障功能与合规,同时优先过滤on*事件处理器、javascript:伪协议、未限制的style等高危项,并避免正则误删、忽略Shadow DOM及自定义元素专有属性。

html属性清理的关键细节讲解

HTML 属性清理不是“删掉所有不认识的属性”就完事,而是有明确目标:移除潜在安全隐患(如 onerror、javascript:)、剔除冗余干扰(如过时的 align、border)、保留语义与功能必需项(如 alt、href、role)。盲目清空或一刀切会破坏可访问性、SEO 或交互逻辑。

哪些 HTML 属性必须保留,不能随便删

清理前先确认这些属性是否承担实际功能或合规要求:

  • alt:图片替代文本,影响可访问性和 SEO,空字符串 alt="" 可保留(表示装饰图),但绝不能直接删掉 alt 属性本身
  • href、src、data-*:功能核心,删除即导致链接失效、资源加载失败或 JS 逻辑中断
  • role、aria- 系列(如 aria-label、aria-hidden):直接影响屏幕阅读器行为,清理时需按 WCAG 规则校验,而非简单放行或清除
  • type(在 、 中):不设默认为 text 或 submit,可能引发表单意外提交,必须显式保留

哪些属性是高危项,应优先过滤

这些属性常被用于 XSS 注入或绕过 CSP,且现代标准中已废弃或无正当用途:

  • on* 类事件处理器:如 onclick、onmouseover、onload —— 即使内容看似“安全”,也应移除;JS 逻辑应统一收口到外部脚本中
  • javascript: 伪协议:出现在 href 或 src 中(如 href="javascript:alert(1)"),必须剥离,替换为 # 或 void(0)(仅限内部可控场景)
  • style 属性:若清理目标是防样式篡改或统一主题,需限制允许的 CSS 属性子集(如只允 color、font-size),而非全量保留;否则易被用于隐藏恶意内容
  • class 和 id:看似无害,但在富文本编辑器输出或用户投稿场景中,可能被用来 hook 恶意 JS(如 class="js-track-click" 被第三方脚本监听),需按白名单机制控制值范围

使用 DOMPurify 清理时容易忽略的配置点

DOMPurify 是目前最可靠的 HTML 属性清理方案,但默认配置不等于安全配置:

DeepBI DHTML 页面生成器
DeepBI DHTML 页面生成器

生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur

下载
  • 不启用 ALLOWED_ATTR 白名单模式:默认只删高危项,但会放过大量遗留属性(如 align、valign),应显式声明允许的属性列表
  • 忽略 FORBID_TAGS 和 FORBID_ATTR 的组合效果:比如设了 FORBID_ATTR: ['style'],但没关掉 svg 标签,攻击者仍可通过 触发 XSS
  • 未处理 data-* 的通配规则:DOMPurify 默认保留所有 data- 属性,若业务依赖 data-user-id,但又不希望 data-onclick 存活,就得用 ADD_DATA_ATTRIBUTES 配合正则精确匹配
  • 服务端调用时未设 SAFE_FOR_TEMPLATES: true:该选项禁用 {{}} 类模板语法解析,避免与 Vue/Handlebars 等框架冲突,漏设会导致清理后残留表达式

手动清理 innerHTML 的陷阱

不用库、靠正则或 setAttribute 循环清理,极易出错:

  • 正则无法正确解析嵌套引号或转义字符:例如 title="He said "don't"",简单 replace(/on\w+="[^"]*"/g, '') 会截断中间的 "don't" 导致 DOM 解析失败
  • 用 element.removeAttribute() 删除后再遍历子节点,可能漏掉动态插入的元素(如通过 document.write 或 insertAdjacentHTML 加入的)
  • 未考虑 Shadow DOM 场景:querySelectorAll('*') 拿不到影子树内的节点,清理范围天然缺失
  • 对自定义元素(如 )的属性不做识别,可能误删其必需的 size、variant 等专有属性

属性清理真正难的不是“删什么”,而是“怎么知道删了之后页面还正常”。建议在清理后做三件事:检查控制台是否报 Failed to execute 'setAttribute' on 'Element' 类错误;用 axe 或 Lighthouse 扫描可访问性回归;对含用户输入的字段(如评论、富文本)做 XSS fuzz 测试。否则,表面干净的 HTML 可能暗藏运行时崩塌风险。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

html属性清理 html

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

7615

7

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

4172

4

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.31

3830

5

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.01

3859

5

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

2023.08.11

5299

6

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

2023.08.11

3781

3

html转txt
html转txt

html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

3609

3

html文本框代码怎么写
html文本框代码怎么写

html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

2023.09.01

3088

6

HTML嵌入CSS样式的方法
HTML嵌入CSS样式的方法

HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.20

3288

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
GDB 17.2 官方文档集合
GDB 17.2 官方文档集合

共0课时 | 0人学习

Bootstrap 入门安装配置
Bootstrap 入门安装配置

共0课时 | 0人学习

38+ PhpStorm 提示和技巧
38+ PhpStorm 提示和技巧

共1课时 | 244人学习