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,但又不影响请求。

posted @ 2022-05-08 14:34  黑白猫123  阅读(2758)  评论(1编辑  收藏  举报