URL编码

浏览:3次阅读

提醒:本文最后更新于 2026-05-24 06:35,文中所关联的信息可能已发生改变,请知悉!

url 编码是一种浏览器用来打包表单输入的格式。浏览器从表单中获取所有的 name 和其中的值,将它们以 name/value 参数编码作为 URL 的一部分或者分离地发给服务器。

编辑

概述
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 里是否含有定义的关键字,有之,则为注射。


正文完
 0
douyc
收录声明:网站收录文章,由 douyc 于2016-06-04整理,共计2167字。
转载说明:文章来源于网络收集,如侵权请联系我们删除有关信息.