url编码
介绍
url编码是一种将普通文本编码再编码的方案。用于保证url数据安全传输。
url编码可以针对所有字符进行编码。
url编码作用
http://www.cc.com/login?name=abc
1、敏感字符编码
敏感字符,是指ascii编码中可能对url结构进行影响的字符,比如#
如果想表示敏感字符作为普通文本字符,比如#作为请求参数的值,可以通过对敏感字符进行URL编码,服务器接收后将视其为普通文本字符而非url结构字符。
2、控制字符
无法直接输入的字符,Ascii之内的控制字符,即0-31和127。
3、多字节字符编码
多字节字符的某个字节可能是单字节的敏感字符或控制字符,服务器可能将其误解析,因此要求对所有多字节进行URL编码。
编码方案
1、普通文本编码方案
一般而言,是使用utf-8对普通文本编码,这样可以兼容几乎所有字符。
(至少测试过程中,最新版的Edge和firefox、chorm浏览器是如此)
2、编码
先将字符用UTF-8编码进行表示,URL编码是对每个字节前加%字符前缀。
比如:
abc123 %61%62%63%31%32%33
宇宙 %E5%AE%87%E5%AE%99
url编码使用
当地址栏直接输入url,或者页面内发起url请求,浏览器将对path和query部分能够识别的属于自动编码范围的字符进行自动URL编码,再进行请求。
1、浏览器无法自动识别对是url结构的字符,还是普通文本,对于这一部分字符如果要作为普通文本字符,必须手动设置url编码。
- 比如路径部分的/#?=&
- 比如参数部分的&=#
- Ascii之内的控制字符,即0-31和127
2、浏览器对ascii内完全不会引起安全问题的字符,不进行自动编码,也不要求编码。当然,手动编码也是可以正常请求的。
- Ascii之内的数字和字母,数字48-57,大写字母65-90,小写字母97-122不会进行编码。
3、浏览器自动编码的范围包括:ascii之外的所有字符,ascii之内的部分字符
4、常见的几种浏览器Edge、firefox、chorm对自动编码前后的地址栏显示可能有所差异,但是请求中所进行的编码没有差异,自动编码范围相同。(IE对path和query编码有所差别,但近乎淘汰,暂时不考虑讨论)
url编码与空格
url中不能直接包含空格,否则服务器会报请求结构错误。
浏览器会将空格编码成%20或者字符+
而真正的字符+如果想要表示,则需要使用url编码%2b
url编码与表单
当表单元素form的enctype为默认值,或者显式设置为application/x-www-form-urlencoded时,请求头部字段为:
Content-Type: application/x-www-form-urlencoded
此时表单提交数据也会进行url编码,服务器接收后会根据该请求头部字段判断进行url解码。
url编码与解码工具
(1)http://www.jsons.cn/urlencode/
该网址是一个在线url编码与解码工具,其可以对几乎所有文本字符进行URL编码和解码。
使用方便,但是不会对字母和数字等简单ascii字符进行URL编码。
(2)burp的Decoder模块选择Encode或Decode方案为URL
可以对字母和数字等简单ascii字符进行URL编码,但是无法对多字节进行URL编码,编码多字节是错误的结果。同样也无法针对多字节字符的编码结果进行解码。
一般将这两个工具结合使用。
url编码与xss
将字符进行URL编码,可以使得用户无法直观查看url,但又不影响请求。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Blazor Hybrid适配到HarmonyOS系统
· 万字调研——AI生成内容检测
· 解决跨域问题的这6种方案,真香!
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库