讨论request.form()和request

 


  大家在学习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
   <form name="form1" mothod="post" action="check.asp">
   name:<input  type="text" name="name" id="naeme" size="6" maxlength="6"><br>
   password<input  type="password" name="password" id="password" ><br>
   <input  type="submit" value="submit" οnclick="return check(this.form)">
   </form>
   <script language=JavaScript>
   function check()
  {
   //验证的信息
  }
   </script>

                                 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("参数")这样的用法,我不认同,因为它带来不安全因素,对一个大的网站

根本不会出现这样的低级错误,鉴于很多书都这么用,可能把读者弄迷糊了,所以在次对他们进行讨论。

  我提倡用标准的用法,只要你注意小的细节的东西,那么你将来肯定能成为一个好的程序员。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值