为什么你的 <b> 变成了 %3Cb%3E?一文读懂 URL 编码机制与误区
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
摘要:在前端开发与安全测试中,我们常看到 URL 参数被自动转换成 本文将从 RFC 标准出发,解析 URL 编码的底层逻辑、触发时机以及它与 Web 安全的真实关系。 1. 现象还原在进行 Web 安全测试(如 XSS 注入)时,我们尝试在 URL 参数中输入 HTML 标签:
然而,当我们查看网络请求(Network)或地址栏时,发现它变成了: 初学者容易产生两个误区:
真相是:这只是 HTTP 协议为了“交通合规”做的标准动作,与安全防御毫无关系。 2. 为什么要编码?(RFC 3986 标准)URL(统一资源定位符)的设计初衷是只能通过 ASCII 字符集在互联网上传输。为了避免歧义和保证传输安全,IETF 在 RFC 3986 标准中将字符分为了三类: 2.1 绝对安全的字符(Unreserved)不需要编码,走到哪里都是原样。
2.2 保留字符(Reserved)在 URL 结构中有特殊语法含义的字符。
2.3 不安全字符(Unsafe)容易引起解析歧义或不可打印的字符。
URL 编码的核心算法非常简单:Hex(UTF-8) + % 。
以字符
以中文 “测” 为例:
4. 编码与解码的生命周期理解了这个生命周期,你就会明白为什么 URL 编码防不住 XSS。
关键结论: 后端框架(Spring Boot, Express, Django 等)在将请求交给你的业务代码(Controller)之前,通常已经自动完成了 URL 解码。 如果你在数据库里存入了这个值,存进去的是 5. 前端开发实战指南在 JS 中手动处理 URL 编码时,请务必区分这两个 API:
|
关键字查询
相关文章
正在查询... |