停止使用 innerHTML:3 种安全渲染 HTML 的替代方案

innerHTML真的是前端世界里最“顺手也最危险”的按钮之一。 它方便到让人上瘾——也脆弱到让攻击者一旦把恶意内容塞进你的数据里,你的页面就会“热情执行”。

比如这种经典投毒:

<img src=x onerror=alert(1)>

只要你把它丢进innerHTML,浏览器就会毫不犹豫地配合演出。

下面这 3 种替代方案,才是更接近现代“正确姿势”的做法:有标准方向、有工业级方案、也有最安全的“根治法”。

1)未来标准派:Sanitizer API 的setHTML()

如果你确实需要渲染HTML 字符串,又不想自己写一堆过滤规则,那么Element.setHTML()是一个非常直球的方向:它会把 HTML 解析后进行清理,移除被认为不安全的元素/属性,再插入 DOM。

用法像这样:

const dirtyInput = '<img src=x onerror=alert(1)> <b>Hello</b>'; const el = document.getElementById('target'); // 会自动清掉 onerror 这类危险属性 el.setHTML(dirtyInput);

你要注意两点现实问题:

  • 它目前仍是实验性特性,MDN 也明确提示要看兼容性表,别盲目上生产。

  • 这套 API 目前出自 WICG 的孵化规范,并非已进入 W3C 标准轨道的“最终标准”。

一句话:方向很对,但上生产前先确认你的目标浏览器。

2)行业标准:DOMPurify

因为setHTML()还没做到“全平台稳用”,现实世界里更常见的安全做法是:先净化,再插入

而 DOMPurify 基本就是这条路上的“事实标准”:它专门用来清洗不可信 HTML,去掉潜在 XSS 内容(脚本、危险属性、奇怪的 SVG/MathML 边界等)。

用法也很简单:

import DOMPurify from 'dompurify'; const dirty = '<script>alert("hack")</script><div>Safe Content</div>'; const clean = DOMPurify.sanitize(dirty); element.innerHTML = clean;

注意:这里你还是用了innerHTML,但关键差别是——你插入的已经是“被清洗过的字符串”

安全侧的共识也很明确:当你需要做 HTML Sanitization 时,要用成熟方案、遵循安全指导(OWASP 的 XSS 预防原则里也强调了输出编码与必要时的净化)。

一句话:要渲染富文本,现在就用 DOMPurify,别自研“简易过滤器”。

3)最安全的方法: document.createElement()

如果你并不需要把“HTML 字符串”当 HTML 渲染出来,那最安全的路线其实是:别让浏览器把输入当成可执行结构

直接用 DOM API 构建节点,用textContent填内容——浏览器会把它当文本,不会当脚本,也就天然避免 XSS。

const div = document.createElement('div'); div.textContent = userInput; // 默认安全:只会当文字 div.classList.add('my-class'); document.body.appendChild(div);

这招的气质就是:你不需要“清洗”,因为你根本不给它“执行的机会”。

最后

  • 纯文本:优先textContent(又快又安全)

  • 必须渲染富文本(今天就要上线):用 DOMPurify

  • 想跟上未来标准:关注/试用setHTML(),但先过兼容性这关

全栈AI·探索:涵盖动效、React Hooks、Vue 技巧、LLM 应用、Python 脚本等专栏,案例驱动实战学习,点击二维码了解更多详情。

最后:

CSS终极指南

Vue 设计模式实战指南

20个前端开发者必备的响应式布局

深入React:从基础到最佳实践完整攻略

python 技巧精讲

React Hook 深入浅出

CSS技巧与案例详解

vue2与vue3技巧合集

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1186328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源语音技术突破:FSMN-VAD模型结构深度解析

开源语音技术突破&#xff1a;FSMN-VAD模型结构深度解析 1. FSMN-VAD 离线语音端点检测控制台 在语音交互系统、自动语音识别&#xff08;ASR&#xff09;预处理和长音频切分等场景中&#xff0c;如何高效准确地识别出音频中的有效语音片段&#xff0c;剔除静音或噪声干扰&am…

CV-UNet应用案例:网店商品图批量标准化处理

CV-UNet应用案例&#xff1a;网店商品图批量标准化处理 1. 引言 1.1 电商图像处理的现实挑战 在电商平台运营中&#xff0c;商品图片的质量直接影响转化率。然而&#xff0c;大量商品图往往存在背景杂乱、尺寸不一、光照不均等问题&#xff0c;传统人工抠图耗时耗力&#xf…

Speech Seaco Paraformer是否支持Ogg?小众格式兼容性测试报告

Speech Seaco Paraformer是否支持Ogg&#xff1f;小众格式兼容性测试报告 1. 背景与问题提出 在语音识别&#xff08;ASR&#xff09;的实际应用中&#xff0c;音频文件的格式多样性常常成为影响系统可用性的关键因素。尽管WAV和MP3是主流格式&#xff0c;但在某些场景下——…

SGLang性能实战对比:RadixAttention如何提升KV缓存命中率?

SGLang性能实战对比&#xff1a;RadixAttention如何提升KV缓存命中率&#xff1f; 1. 引言 随着大语言模型&#xff08;LLM&#xff09;在实际业务中的广泛应用&#xff0c;推理效率和部署成本成为制约其规模化落地的关键因素。尤其是在高并发、多轮对话等复杂场景下&#xf…

SenseVoice Small语音识别实战|附情感与声学事件标签提取技巧

SenseVoice Small语音识别实战&#xff5c;附情感与声学事件标签提取技巧 1. 引言&#xff1a;为什么选择SenseVoice Small进行语音识别 在当前AI语音技术快速发展的背景下&#xff0c;语音识别已不再局限于简单的文字转录。越来越多的应用场景需要模型具备更深层次的音频理解…

NotaGen部署优化:多GPU并行生成配置指南

NotaGen部署优化&#xff1a;多GPU并行生成配置指南 1. 背景与挑战 1.1 NotaGen模型简介 NotaGen是一款基于大语言模型&#xff08;LLM&#xff09;范式构建的古典符号化音乐生成系统&#xff0c;由开发者“科哥”通过WebUI二次开发实现。该模型能够根据用户选择的音乐时期、…

RexUniNLU性能优化:让中文NLP任务提速50%

RexUniNLU性能优化&#xff1a;让中文NLP任务提速50% 获取更多AI镜像 想探索更多AI镜像和应用场景&#xff1f;访问 CSDN星图镜像广场&#xff0c;提供丰富的预置镜像&#xff0c;覆盖大模型推理、图像生成、视频生成、模型微调等多个领域&#xff0c;支持一键部署。 1. 引言 …

开源大模型落地新选择:Qwen3系列多场景应用实战指南

开源大模型落地新选择&#xff1a;Qwen3系列多场景应用实战指南 1. Qwen3-1.7B 模型简介与核心优势 1.1 轻量级高效推理的代表作 Qwen3-1.7B 是通义千问 Qwen3 系列中的一款密集型语言模型&#xff0c;参数规模为 17 亿&#xff0c;在保持轻量化的同时实现了卓越的语言理解与…

图像修复工具横向评测:GPEN在中文社区的适用性分析

图像修复工具横向评测&#xff1a;GPEN在中文社区的适用性分析 1. 引言&#xff1a;图像修复技术的发展与中文社区需求 随着深度学习在计算机视觉领域的深入应用&#xff0c;图像修复与肖像增强技术已从学术研究走向大众化工具。尤其在社交媒体、老照片修复、证件照优化等场景…

5个SAM3创意玩法:云端GPU开箱即用,10元全体验

5个SAM3创意玩法&#xff1a;云端GPU开箱即用&#xff0c;10元全体验 你是不是也遇到过这种情况&#xff1f;作为一个自媒体博主&#xff0c;看到别人用AI做特效视频炫酷到爆——人物自动抠像、物体追踪无缝合成、还能根据一句话就把画面里“穿红衣服的人”精准圈出来。你也想…

GPEN错误日志查看:排查问题的关键信息定位方法

GPEN错误日志查看&#xff1a;排查问题的关键信息定位方法 1. 引言 1.1 技术背景与问题提出 GPEN&#xff08;Generative Prior ENhancement&#xff09;作为一种基于生成先验的图像肖像增强模型&#xff0c;广泛应用于老照片修复、低质量图像提升和人像细节重建等场景。其通…

Emotion2Vec+ Large成本效益分析:自建vs云服务ROI对比报告

Emotion2Vec Large成本效益分析&#xff1a;自建vs云服务ROI对比报告 1. 背景与问题提出 随着语音交互技术的普及&#xff0c;情感识别在智能客服、心理评估、教育测评等场景中的价值日益凸显。Emotion2Vec Large作为阿里达摩院开源的大规模语音情感识别模型&#xff0c;凭借…

IndexTTS 2.0+HTML:前端轻松嵌入AI语音播放器

IndexTTS 2.0HTML&#xff1a;前端轻松嵌入AI语音播放器 在短视频、虚拟主播和AI有声读物日益普及的今天&#xff0c;一个共同的技术痛点浮现出来&#xff1a;如何让机器生成的声音不仅听起来自然&#xff0c;还能精准匹配画面节奏、表达丰富情感&#xff0c;并且快速适配不同…

智能体是自主与它主的协同调度

智能体&#xff08;Agent&#xff09;就是自主选择、调度、指控其它比自己更有能力的大中小型AI去完成多个任务集&#xff0c;是通过它主实现意图目标的价值系统&#xff0c;要理解这个概念&#xff0c;需从智能体的核心定义、多智能体协作机制、任务集管理逻辑和价值实现路径四…

DCT-Net实战案例:企业形象设计卡通化解决方案

DCT-Net实战案例&#xff1a;企业形象设计卡通化解决方案 1. 背景与需求分析 随着数字营销和品牌个性化的兴起&#xff0c;越来越多企业希望打造具有辨识度的虚拟形象用于宣传、客服或IP运营。传统的卡通形象设计依赖专业画师&#xff0c;成本高、周期长&#xff0c;难以满足…

AI图像风格迁移新选择|DCT-Net GPU镜像实现高质量二次元虚拟形象生成

AI图像风格迁移新选择&#xff5c;DCT-Net GPU镜像实现高质量二次元虚拟形象生成 随着AI图像生成技术的快速发展&#xff0c;人像卡通化作为风格迁移的重要应用方向&#xff0c;正广泛应用于社交头像、虚拟角色设计和数字内容创作等领域。传统的卡通化方法往往依赖复杂的后期处…

AI初创公司首选:Qwen2.5-7B低成本商用部署完整指南

AI初创公司首选&#xff1a;Qwen2.5-7B低成本商用部署完整指南 1. 引言 对于AI初创公司而言&#xff0c;选择一个性能强劲、成本可控、支持商用的开源大模型是技术选型的关键一步。在当前70亿参数量级的主流模型中&#xff0c;通义千问 Qwen2.5-7B-Instruct 凭借其卓越的综合…

Elasticsearch内存模型配置:Kubernetes环境手把手教程

Elasticsearch 内存调优实战&#xff1a;在 Kubernetes 上构建高性能搜索集群你有没有遇到过这样的情况&#xff1f;Elasticsearch 集群跑得好好的&#xff0c;突然某个节点开始频繁 GC&#xff0c;响应变慢&#xff0c;甚至直接被 OOMKilled&#xff1b;或者查询延迟从 100ms …

二叉搜索树,平衡二叉树,红黑树总结

1. 二叉搜索树 (Binary Search Tree, BST)概念​二叉搜索树是一种基础数据结构&#xff0c;具有以下特性&#xff1a;每个节点最多有两个子节点&#xff08;左子节点和右子节点&#xff09;。对于任意节点&#xff0c;其左子树中的所有节点值均小于该节点值&#xff0c;右子树中…

Unreal Fur 假毛发 草地 Grass

Unreal Fur 假毛发 草地 Grass坦克世界里有个狼狗 : 于是用ditherTAA实现: 当然还有一些复杂的逻辑,比如Clump Rotation .. 等逐渐实现