提醒:本文最后更新于 2026-05-24 06:35,文中所关联的信息可能已发生改变,请知悉!
url 编码是一种浏览器用来打包表单输入的格式。浏览器从表单中获取所有的 name 和其中的值,将它们以 name/value 参数编码作为 URL 的一部分或者分离地发给服务器。
编辑
一、简介
url 编码是一种浏览器用来打包表单输入的格式。浏览器从表单中获取所有的 name 和其中的值,将它们以 name/value 参数编码(移去那些不能传送的字符,将数据排行等等)作为 URL 的一部分或者分离地发给服务器。不管哪种情况,在服务器端的表单输入格式样子象这样:
theName=Ichabod+Crane&gender=male&status=missing& ;headless=yes
二、编码规则
URL 编码遵循下列规则:每对 name/value 由 &;符分开;每对来自表单的 name/value 由 = 符分开。如果用 户没有输入值给这 个 name,那么这个 name 还是出现,只是无值。任何特殊的字符(就是那些不是简单的七位 ASCII,如汉字)将以百分符 % 用十六进制编码,当然也包括象 =,&;,和 % 这些特殊的字符。其实 url 编码就是一个字符 ascii 码的十六进制。不过稍微有些变动,需要在前面加上“%”。比如“\”,它的 ascii 码是 92,92 的十六进制是 5c,所以“\”的 url 编码就是 %5c。
三、防止 sql 注入
URL 编码平时是用不到的,因为 IE 会自动将输入到地址栏的非数字字母转换为 url 编码。曾有人提出数据库名字里带上“#”以防止被下载,因为 IE 遇到 #就会忽略后面的字母。破解方法很简单——用 url 编码 %23 替换掉 #。现在 SQL 注射非常流行,所以就有人写了一些防注射的脚本。
下面××SQL 通用防注入 asp 版部分代码。
Fy_Url=Request.ServerVarIABles(“QUERY_STRING”)
Fy_a=split(Fy_Url,”&”)
redim Fy_Cs(ubound(Fy_a))
On Error Resume Next
for Fy_x=0 to ubound(Fy_a)
Fy_Cs(Fy_x) = left(Fy_a(Fy_x),instr(Fy_a(Fy_x),”=”)-1)
Next
For Fy_x=0 to ubound(Fy_Cs)
If Fy_Cs(Fy_x)<>”” Then
If Instr(LCase(Request(Fy_Cs(Fy_x))),”and”)<>0 then
Response.Write “ 出现错误!”
Response.End
End If
End If
Next
它的思路就是先获得提交的数据,以“&;”为分界获得并处理 name/value 组,然后判断 value 里是否含有定义的关键字,有之,则为注射。
url 编码是一种浏览器用来打包表单输入的格式。浏览器从表单中获取所有的 name 和其中的值,将它们以 name/value 参数编码(移去那些不能传送的字符,将数据排行等等)作为 URL 的一部分或者分离地发给服务器。不管哪种情况,在服务器端的表单输入格式样子象这样:
theName=Ichabod+Crane&gender=male&status=missing& ;headless=yes
URL 编码遵循下列规则:每对 name/value 由 &;符分开;每对来自表单的 name/value 由 = 符分开。如果用 户没有输入值给这 个 name,那么这个 name 还是出现,只是无值。任何特殊的字符(就是那些不是简单的七位 ASCII,如汉字)将以百分符 % 用十六进制编码,当然也包括象 =,&;,和 % 这些特殊的字符。其实 url 编码就是一个字符 ascii 码的十六进制。不过稍微有些变动,需要在前面加上“%”。比如“\”,它的 ascii 码是 92,92 的十六进制是 5c,所以“\”的 url 编码就是 %5c。
URL 编码平时是用不到的,因为 IE 会自动将输入到地址栏的非数字字母转换为 url 编码。曾有人提出数据库名字里带上“#”以防止被下载,因为 IE 遇到 #就会忽略后面的字母。破解方法很简单——用 url 编码 %23 替换掉 #。现在 SQL 注射非常流行,所以就有人写了一些防注射的脚本。
下面××SQL 通用防注入 asp 版部分代码。
Fy_Url=Request.ServerVarIABles(“QUERY_STRING”)
Fy_a=split(Fy_Url,”&”)
redim Fy_Cs(ubound(Fy_a))
On Error Resume Next
for Fy_x=0 to ubound(Fy_a)
Fy_Cs(Fy_x) = left(Fy_a(Fy_x),instr(Fy_a(Fy_x),”=”)-1)
Next
For Fy_x=0 to ubound(Fy_Cs)
If Fy_Cs(Fy_x)<>”” Then
If Instr(LCase(Request(Fy_Cs(Fy_x))),”and”)<>0 then
Response.Write “ 出现错误!”
Response.End
End If
End If
Next
IAB
它的思路就是先获得提交的数据,以“&;”为分界获得并处理 name/value 组,然后判断 value 里是否含有定义的关键字,有之,则为注射。