url编码
发布时间:2026-08-18 | 浏览:1
解决词条问题可获得额外积分和经验奖励哦~
url编码是一种浏览器用来打包 表单 输入的格式。浏览器从表单中获取所有的name和其中的值 ,将它们以name/value参数编码(移去那些不能传送的 字符 ,将数据排行等等)作为URL的一部分或者分离地发给 服务器 。不管哪种情况,在服务器端的表单输入 格式 样子象这样:
theName=Ichabod+Crane&gender=male&status=missing& ;headless=yes
含义 一种浏览器用来打包 表单 输入
一种浏览器用来打包 表单 输入
格式 theName=Ichabod+Crane
theName=Ichabod+Crane
编码规则 每对name/value由&;符分开
每对name/value由&;符分开
折叠 编辑本段 编 张 码规则
URL编码遵 印定走直兴目检础另引 循下列规则: 每对name/value由&;符 分开;每对来自 表单 的name/ value由=符分 开。如果用 解码软件 户没 360百科 有输入值给这个nam 还坚说格静 e,那么这个nam 球稳陆 e还是出现,只是无值。任何特殊的 字符 (就是那些不是简单的七位A SCII,如汉字)将以 友波群杆体米丰印 百分符%用 十六进制编码 ,当 然也包括象 =,&;,和 % 这些 特殊的字符。其实url编码就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上"%"。比如"\",它的ascii码是92,92的十六进制是 田序 5c,所以"\"的url编码就是%5c。那么汉字的url编码呢?很简单,看例子:"胡"的ascii码是-17670,十六进制是 BAFA,url编码 是"%BA%FA"。
backspace %0 丝边可谓别后基哪 8
剧议叫满类置了很孔前 space %20
Ø 良粉展态鱼用社 ; %D8
> % 施司传局调井增司充 3E
&oslas 棉题探义棉升车广宗杀片 h; %F8
n 测口主句判世按往真 %6E
折叠 编辑本段 防 止sql注入
URL编码平时是用不到的 ,因为IE会自动 将输入到地址栏的非数字字母转换为url编码。曾有 岩今六毫备百 人提出数据库名字 里带上"#"以防止被下载,因 为IE遇到#就会忽略后面的字 母。破解方法很简单--用 url编码%23替换掉# 。现在SQL注射非常 流行,所以就有人写 面修们适创阳团费界左 了一些防注射的脚本。下面××SQL通用防注入a sp版部分代码。
Fy_Url=Re 洋排时否 quest.ServerVariables 强支 ("QUERY_STRING")
Fy_a=spl it(Fy_Url,"&")
redim Fy_Cs(ubound(Fy_a))
On 资边报真句 Error Resume Next
for Fy_x=0 to uboun 误啊且识身石且明 d(Fy_a)
Fy_C s(Fy_x) = left(Fy _a(Fy_x),instr 为哥补让余矿 (Fy_a(Fy_x),"=")-1)
For Fy_ 温 x=0 to ubound(Fy_Cs 章引地酸议到劳矿好东 )
If Fy_Cs( Fy_x)<>"" The n
If Instr(LCase(Request( 类变己望钢时 Fy_Cs(Fy_x))),"and")<>0 the n
Response.Writ 钟备 e "出现错误!"
R 审光地含浓那的做福部益 esponse.End
End I 它衡风亲投核引肥说止 f
它的思路就是先获得提交的数据, 以"&;"为分界获得并 处理name/value 组,然后判断value里是否含 有定义的关键字,有之,则为注射。
看起来valu e被检查了,但是name就不同 。它的name/va 技仍初升观普反粒 lue组值来自于Re 集示精答都云 quest.ServerVariables 从般太望妒乡 ("QUERY_STRING"),这里会出现问题。Request.Se 除胜好搞车手赵难财缩万 rverVariables("QUERY_ST 金护么职执 RING")是得到客户端提 交的字符串,这里并不会自动转换 url编码,如果把nam 有罗并左子转翻题眼船尼 e进行url编码再提交的话 助晶英负妒了待这 ,就可以绕过检查了。例如:参数是ph4nt0m=lake2 and lis0,此时程序能够检测到;如果提交 %50h4nt0m =lake2 and lis0(对p进行url编码),程序就会去 喜已静福战离快角背 判断%50h4nt0m的值,而%50h4nt0m会被转换为ph4nt0m,所以%50 h4nt0m值为空 ,于是就绕过了检测。为什么既然name不解码可以绕过检查而value就不能绕过 食吸全资士从马器门 呢?因为value的值取自Request(Fy_ 击缺别一 Cs(Fy_x)),这个服务器就会解码的。要想改进 程序,只要能够得 到客户端提交的数据是解 鱼绝足洋达校拿她 码后的就可以了,把得到name的语句改为For Each Submit Name In Request. QueryString就可以了。
编码问题是JAVA初学者在web开发过程中 经常会遇到问题,其中 之一是URL中使用中文等非 ASCII的字符造成 服务器 后台程序解析出现乱码的问题。
也就是容易出现中文字符的部分:
(1)Query String中的参数值
(2)servlet path
(1)浏览器:我们的客户端(浏览器)本身并没有遵循URI编码的规范。
(2)Servlet服务器:Servlet服务器的没有正确配置。
(3)开发人员并不了解Servlet的规范和API的含义。
(1)HttpServletRequest.setCharacterEncoding()方法 仅仅只适用于设置post提交的requestboda的编码而不是设置get方法提交的queryString的编码。该方法告诉应用服务器应该采用什么编码解析post传过来的内容。
(2) HttpServletRequest.getPathInfo()返回的结果是由Servlet服务器解码(decode)过的。
(3) HttpServletRequest.getRequestURI()返回的字符串没有被Servlet服务器decoded过。
(4) POST提交的数据是作为request body的一部分。
(5) 网页的Http头中ContentType("text/html; charset=GBK")的作用:
(a) 告诉浏览器网页中数据是什么编码;
(b) 表单提交时,通常浏览器会根据ContentType指定的charset对表单中的数据编码,然后发送给服务器的。
注意:这里所说的ContentType是指http头的ContentType,而不是在网页中mete中的ContentType。