您的位置:程序门 -> web 开发 -> asp



[讨论]如何能否验证码session欺骗,如何防止


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


[讨论]如何能否验证码session欺骗,如何防止[已结贴,结贴人:smartcatiboy]
发表于:2007-05-27 15:11:24 楼主
学到session问题,有些东西不打懂,问错了莫怪。

由于http的无连接状态,验证过程必须将答案保存在sessioncookie中,于是可以通过伪造提交结果和答案进行欺骗。

例如(以下是伪码)
======================
服务器端:
view.asp         '阅览
<%
    session( "checknum ")=cint(rnd*9)
%>
<form>
验证码: <img   src= "checknum.asp? <%   =   session( "checknum ")   %> "/> <input   name= "checknum ">
<br>
<textarea   name= "replay "> </textarea>
<input   type= "submit "   action= "reply.asp "   method= "post ">
</form>
=========
reply.asp
<%
    if   request.form( "checknum ") <> session( "checknum ")   then  
          response.write   "验证码错误 "
          response.end
    end   if  
%>


================
非法破解的端:
set   sender=createobject( "msxml2.serverxmlhttp ")
sender.open   open, "....reply.asp ",false
sender.setrequestheader   "cookie ",以往收集的任何一个正确验证码cookie
sender.setrequestheader   "content-type ", "application/x-www-form-urlencoded "
for   i=0   to   100000
        sender.send   "checksum=以往搜集的对应验证码&replay=垃圾数据 "
next  


================
由于绕过了验证过程,验证码的复杂度和算法一无用处。

请教,有个欺骗办法是否可行,如何防止?

发表于:2007-05-27 15:36:441楼 得分:0
先判断提交页面来源。
发表于:2007-05-27 16:08:132楼 得分:0
判断来源更好伪造sender.serrequesetheader   "referer ",......
发表于:2007-05-27 19:33:183楼 得分:0
up
发表于:2007-05-27 19:37:534楼 得分:0
================
由于绕过了验证过程,验证码的复杂度和算法一无用处。

请教,有个欺骗办法是否可行,如何防止?


你测试过吗???

你的   cookie   相同的机率有多大???
xxxxxxxxxxxxxxxxxxxxxx万分之一?????
发表于:2007-05-27 19:38:275楼 得分:0
cookie   相同了,session也不一定相同.
再仔细看看session原理章节吧.
发表于:2007-05-27 21:18:586楼 得分:0
这里我糊涂了。楼上能否仔细讲解一下,分不够我在加。

===============

我现在的理解是,session需要在客户机(如果开启cookie的话)创建一个不保存的sessioncookie,sessionid,session变量都在其中,他通过http包头向服务器发送;
而普通的iecookie是persisitantcookie,两者不同。但是都可以在客户端获得(虽然是加密后的秘文)

我现在的理解是:sessioncookie可以通过getresponseheader获取。通过setrequestheader发送。修改包头前的sessioncookie,发送对应的验证码数据,是否可以欺骗验证程序。因为服务器端的session和request( "checknum ")是伪造的数据。
发表于:2007-05-27 21:20:487楼 得分:0
相关内容我在百度上搜不到,我想肯定是有问题的,但是不知道错在哪里。
发表于:2007-05-27 22:43:578楼 得分:0
session的话,验证信息不是都存在服务器的内存里的吗?不行就象动网的session+cookies的方式呢?
发表于:2007-05-27 23:05:099楼 得分:200
首先,你要知道验证码的原理.

为什么要有验证码,我不说了.

说说验证码页的大致流程.   验证码的产生..


当一个用户去请求一个带有   <img   src= "验证码图片srcurl ">   这样一个页面的时候.   其实,浏览器至少有两个http请求.

首先..   肯定是html请求的这个页面.   然后,在浏览器解析这个页面时,知道了,哦.还要去请求   验证码图片.   所以,,浏览器会再开一个线程去请求验证码图片的http请求.

这个请求分两种情况.
      a   游览器已对该站有cookie(并且有sessionid的cookie)
      b   浏览器没有对该站的cookie

当a时,就是浏览器明确自己的身份.是sessionid的用户..这时,验证码图片生成程序   就会检查sessionid的有效性以及原保存session数据是否过期.    
        注意:     session数据包含很多,其中,有一个,就是保存了验证码数据的session.   是不是因为有sessionid了,这个数据就不动它了呢?   不是...这个session在每次请求,都会生成一个随机数字..这样,即使你伪造了sessionid的cookie   这时候   session里的数据已经变掉了.也就是说,你用cookie伪造过去,你得到的验证码是已经变掉的.

当b时,   验证码图片生成程序在初始化session时,就会自动为客户端ie添加一个sessionid的cookie.这样,以后浏览器就会把生成的sessionid   的cookie带过来.


当然,你的担心   不是   全没有道理...
session的安全是存在...只是不体现在验证码上...   因为每次验证码session都会变化...


呵呵.如果我伪造sessionid的cookie是不是能得到服务端的session数据呢?  
答案,   是的,是可以的....

曾经有一次...   在局网嗅探到一次http请求数据..
里面有cookie   包含   了sessionid   然后有个网址.

然后   在自己浏览器端添加了该站的cookie,   测试了一下.   成功地得到了那个用户在那个站点的权限....

发表于:2007-05-27 23:13:0710楼 得分:0
讲的很清楚,明白了
分数加到200分,感谢回复
发表于:2007-05-28 12:28:3511楼 得分:0
赚翻了......
发表于:2007-07-16 09:19:3512楼 得分:0
对,session都有唯一id的,重复的机率太小了!
发表于:2007-08-07 10:29:4013楼 得分:0
刚改的验证码程序,允许多页面同时产生验证码而不冲突

http://www.netdust.cn/codedefence.htm


快速检索

最新资讯
热门点击