日期:2010-06-02  浏览次数:20921 次

   如今你要申请一个QQ号,需要输入很复杂的验证码:验证码由若干个汉字组成,还加上了花哩唬哨的背景,使得有些汉字实在难以辨认。腾讯这么做,是为了防止有人利用软件批量获取QQ号码----每次提交都要输入随机生成的验证码,这是软件难以做到的。

    最初的验证码,只是几个随机生成的数字。但是道高一尺魔高一丈,很快就有能识别数字的软件了,“收藏家”们利用这种软件批量获取帐号,或是探测密码,因为软件可以不知疲倦地不断submit。于是,出现了图片形式的验证码,还要加上无规则的背景,既然人眼都难以分辨,想来软件分辨起来就有一定的难度。但是腾讯开始采用汉字图片做验证码,是不是意味着破解验证码的技术又有了新进展,带背景的数字或字母图片形式的验证码,也可以被软件分辨了?

    且不管那么多,我们来谈谈ASP生成验证码的办法吧。

    还是从最简单的例子说起,来了解一下验证码的基本思路。

    第一个例子,在显示表单的同时,生成一个4位的随机数做为验证码,利用session传递该验证码,在数据处理页面,比对用户输入的验证码与session中的值是否一致。顺便说一句,我曾见过有糊涂的仁兄利用hidden类型的input控件传递验证码,孰不知,通过查看页面源代码,该数据是暴露无遗的。还有password型的input中的数据也一样。

<%
'**********************************
'* NAME:post.asp                                                                       *
'* CODE:netops(www.netop.cc)                                                           *
'*  USE:验证码示例一:数字型                                                           *
'* TIME:2005.7                                                                         *
'**********************************

Response.Buffer = true
Dim CheckCode

Response.Write "<html><body>"
'======***表单提交后:***======
if Request.ServerVariables("REQUEST_METHOD")="POST" then
   Dim founderr,callform,msg
   founderr = false    '是否有错误发生
   callform = false    '是否调用表单
   msg = ""            '提示信息

   '==============验证码验证开始===========
   dim sessionCode
   sessionCode = session("chkCode")
   session("chkCode") = ""
   CheckCode = trim(Request.Form("chkcode"))
   if CheckCode = "" then
      msg = msg + "<li>请填写验证码"
      founderr = true
      callform = true
   elseif cstr(CheckCode) <> cstr(sessionCode) then  
      msg = msg + "<li>验证码不正确"
      founderr = true
      callform = true
   end if
   '==================验证码验证结束============

   if founderr = true then
      call message("500")
    &nb