快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

REQUEST废话连篇

 Request对象探讨

  Request是ASP里的一个内部对象,用于获取HTTP哀求中传递的任意信息(如头信息、表单数据、cookies等等)。所以这是在 ASP里面最常用的内部对象,常用来获得GET方法提交的数据(Request.QueryString)、表单POST提交的数据(Request. Form)和Cookies Request.Cookies)。

  我们用Request对象可以指定获取某个特定方法提交的数据。比如我们用这段代码获得通过POST提交的数据lake2的值: request.Form("lake2");而request.queryString("CSDN")获得GET方法提交的CSDN的值。

  对于获取HTTP数据,ASP还给了我们一个更简朴的方式:request(key),即直接使用request而不指定数据集合。此时ASP 会依次在QueryString、From、Cookies、ServerVariables、ClientCertificate、Browser中检查匹配的数据,若发现则返回数据。

  上面6个集合中,ServerVariables、ClientCertificate和Browser的变量是固定了的;而QueryString、From、Cookies的变量可以任意指定。想不到Cookies可以拿来传递任意数据,以前倒没有注重。

  OK,test一下先。在本地web目录新建test.asp文件,内容为:<%=request("b")%>

  Step 1:直接访问http://127.0.0.1/test.asp?b=la<b>k</b>e2,浏览器显示lake2

  Step 2:构造表单提交结果也如step 1

  Step 3: 构造表单,GET传递b值为“He”,同时POST的b为“She”,浏览器显示为“He”。呵呵,按前面的排序有个优先级的

  Step 4:Telnet到本地80端口,构造HTTP哀求如下(注重Cookies哦):

GET /test.asp HTTP/1.1
Accept: */*

Accept-Language: zh-cn

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; TencentTraveler ; .NET CLR 1.1.4322)

Host: 127.0.0.1

Connection: Keep-Alive

Cookie: b=lake2 , Success !

  在一堆服务器响应数据之后,我们看到了“lake2,Success!”(Q:为什么空格不见了?A:因为未对提交的空格进行URL编码)。

  到此,我们已理论和实际相结合的证实了Cookies可以拿来传递数据。

  Request对象与SQL注射

  现在把话题转一下,我们来说说SQL Injection。

  SQL注射攻击是由于Web应用程序没有过滤用户所提交的有害数据而导致危害服务器的一种攻击手法。注重咯,这里涉及到提交数据,自然要跟刚才说了一大堆的request联系上啊。

  归根结底,ASP下面的SQL注射都是由于request的参数没有过滤或者过滤不严。当然,程序员不是安全专家,他们可能不知道如何过滤。

  于是,网络上就出现了通用的防注射ASP程序――“SQL通用防注入系统”。经过一段时间和几个作者的改进,该程序已经比较完善了,基本上可以拦截SQL注射(但是,个人认为它的过滤方法太严,造成许多不便)。“SQL通用防注入系统”是个asp文件,只需在有参数提交的文件中include它就是了。程序过滤的原理是遍历GET和POST参数的值,发现SQL注射要害字(如and、select)就停止正常文件执行。

  嘿嘿,它遍历GET和POST,也就是Request对象的QueryString和From集合,忽略了Cookies。

  现在,我们假设有一个SQL Injection漏洞百出的ASP程序,具备网络安全知识的治理员同学在网上下载并使用了传说中的“SQL通用防注入系统”,但是很不幸,ASP程序中所有获取参数都是使用的request(key)……(呵呵,眼看着一个个封锁被突破,那是很enjoy的事情^_^)

  这里仅仅是假设而已,至于实际中到底有多少ASP程序员喜欢用request(key) 来获取数据就不得而知咯。
返回类别: 教程
上一教程: 从新浪提取上海天气的VBS
下一教程: 采用XML数据来填充ASP表单

您可以阅读与"REQUEST废话连篇"相关的教程:
· ASP OBJECT之:REQUEST
· 用REQUEST对象获得机器的环境参数
· ASP内置对象详解之REQUEST对象
· 用XMLHTTPREQUEST对象进行客户端验证
· 在ASP中使用“REQUEST”时应注重的问题
    微笑服务 优质保证 索取样品