大家在学习ASP时可能在很多书上都看到request的用法,很多书上用request("name")来接收传过来的参数
所以很多人都认为这样的方式是最好的接收参数的方法,可以代替request.form()和request.querystring()
其实方便是方便,但是其中的不安全因素,可能对一些初学者或者是没有安全意识的程序员来说根本没有觉察
出来,下面我就针对这样的用法提出个人的看法,结合入侵过程的经验来做讨论。
首先,request("name")的意思大家都懂得,就是接收用post或者是get方式提交的参数名是name的参数的值,
既然都可以接收,那么也有可能冲突的时候啊,这里就排除这样的可能,因为没有哪个程序员那么奔,让自己
的程序产生这样低级的错误。那么form()也是request对象的一个一个函数,专门用来取得post方式的参数,而
querystring()是用来取得get方式的参数,这样就可以各尽其职了。但是不安全的因素就出现在request("参数")
这样的贪婪的接收参数的方法。我们来举个例子看看吧。
假设现在有两个页面,一个是提交页面login.asp,一个是接收的页面check.asp
下面是 login.asp
check.asp
<%
dim name,password
name=request("name")
password=request("password")
%>
上面是一个简单的提交界面,至于check()是个函数,可以进行客户端的数据的过滤,这样就不会产生荒谬信息的
提交了,这是很必要的,但是毕竟是砸客户端的验证,一般的人可能不会去注意这些东西,但是一些搞破坏的人
可不一样了,他们会在你的表单中乱写一些东西进行提交,我们的客户端的验证当然不允许他们提交了,那他们
是不是就此乖乖的停手了呢,程序员永远不要做这样的幻想哦,那他们是怎么进行他们的提交呢,先介绍第一种
方法,就上面的login.asp来说,他们把这个页面保存到自己的电脑上,然后就把check()的验证函数去掉,然后
将action="完整路径/check.asp" 然后在本地提交,也就是外部提交,这样参数提交过去,check()当然不过问了
那就是接收了,那荒谬的信息就被提交了。这样后果我还没有想到哦。呵呵
那程序员可能想到一个办法,就是,把login.asp中的check()函数写在一个.js文件中然后再在login.asp中
调用.js文件,那么想通过外部提交就不行了,但是我提醒程序员,别高兴得太早了。那我就用第二种方法来绕过
你的验证,看check.asp的写法,都是用request("name")这样不标准的写法,那么我们就用地址栏来绕过验证吧
我们在地址栏中构造语句:http://域名/check.asp?name=duisglkg&password=dlsgslgjsgl
好了,这样的提交方式在check.asp中是可以被接收的,但是根本没有东西去验证它们,那么当然是绕过了验证了
我这只是一个简单的例子,对于request("参数")这样的用法,我不认同,因为它带来不安全因素,对一个大的网站
根本不会出现这样的低级错误,鉴于很多书都这么用,可能把读者弄迷糊了,所以在次对他们进行讨论。
我提倡用标准的用法,只要你注意小的细节的东西,那么你将来肯定能成为一个好的程序员。