ASP与验证码

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

    如今你要申请一个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")
      if callform = true then call myform()
   else    
         msg = "<li>操作成功!"
         call message("500")
   end if
 
'======***页面初始化(表单提交前)***======
else
   CheckCode = ""
   call myform()
end if

Response.Write "</body></html>"

REM 子过程,定义表单
Sub myform()
   Response.Write "<table width=500 border=1 cellspacing=0 cellpadding=5 align=center>"&_
                  "<form name=form1 method=post action=post.asp>"&_
                  "<tr height=30><td rowspan=2 width=100 align=center>验证码</td>"&_
                  "<td><input type=text name=chkcode size=10>&nbsp;&nbsp;&nbsp;&nbsp;"&_
                  getChkCode()&"</td></tr>"&_
                  "<tr height=30><td>请填写文本框右侧的验证码</td></tr>"&_
                  "<tr height=30><td colspan=2 align=center>"&_
                  "<input type=submit name=Submit value=提交></td></tr>"&_
                  "</form></table>"
end Sub

Rem 子函数,生成验证码(四位随机数)
function getChkCode()
   dim ranNum
   randomize
   ranNum=int(9000*rnd)+1000
   session("chkCode") = ranNum
   getChkCode = ranNum
end function

Rem 提示信息
sub message(w)
   Response.Write "<table width="&w&" border=1 cellspacing=0 cellpadding=5 align=center>"&_
                  "<tr height=30><td>提示信息</td></tr>"&_
                  "<tr valign=top><td style=""color:red;"">"&msg&"</td></tr></table>"
end sub
%>

    以上代码展示生成验证码的一般思路,生成一个四位随机数作为验证码,这是最简单,同时也是最不安全的一种方法。
    或许你想到了,可以以每位数字对应一张图片,生成图片型的验证码,就象图片型计数器那样处理。这并不是一个好想法,它跟数值型的验证码没有本质上的区别,并不能提高安全性。
    下面,介绍如何生成图片型的验证码。
    首先,可以通过ASP生成xbm型的验证码,这的的确确是一张xbm格式的图片,而且,你可以任意设置图片的大小。为了简单起见,我们仍以数字为例。
    可以把生成验证码的代码独立出来,命名为checkcode.asp:

<%
'****************************************************************************************
'* NAME:checkcode.asp                                                                  *
'* CODE:netops(www.netop.cc)                                                           *
'*  USE:生成xbm格式的验证码                                                            *
'* TIME:2005.7                                                                         *
'****************************************************************************************
on error resume next
dim i
dim countdata
countdata="1234567890"
dim rou,chkcode,chklen
chkcode=""
chklen = 4
randomize
for i=1 to 4
   rou = int(rnd*10)
   chkcode = chkcode + cstr(rou)
next

dim strDigits
strDigits = Array(_
         "0","0x3c","0x66","0x66","0x66","0x66","0x66","0x66","0x66","0x66","0x3c",_
         "1","0x30","0x38","0x30","0x30","0x30","0x30","0x30","0x30","0x30","0x30",_
         "2","0x3c","0x66","0x60","0x60","0x30","0x18","0x0c","0x06","0x06","0x7e",_
         "3","0x3c","0x66","0x60","0x60","0x38","0x60","0x60","0x60","0x66","0x3c",_
         "4","0x30","0x30","0x38","0x38","0x34","0x34","0x32","0x7e","0x30","0x78",_
         "5","0x7e","0x06","0x06","0x06","0x3e","0x60","0x60","0x60","0x66","0x3c",_
         "6","0x38","0x0c","0x06","0x06","0x3e","0x66","0x66","0x66","0x66","0x3c",_
         "7","0x7e","0x66","0x60","0x60","0x30","0x30","0x18","0x18","0x0c","0x0c",_
         "8","0x3c","0x66","0x66","0x66","0x3c","0x66","0x66","0x66","0x66","0x3c",_
         "9","0x3c","0x66","0x66","0x66","0x66","0x7c","0x60","0x60","0x30","0x1c")

dim iCharWidth,iCharHeight,theBit,theNum,iRow,k,theOffset
dim imageStr
imageStr = ""

iCharWidth = 8
iCharHeight= 10*1
Response.ContentType ="image/x-xbitmap"
Response.Expires =0
Response.Write "#define counter_width "&iCharWidth*chklen&chr(13) & chr(10)
Response.Write "#define counter_height "&iCharHeight&chr(13) & chr(10)
Response.Write "static unsigned char counter_bits[]={"
for iRow=0 to iCharHeight-1
   for i=1 to chklen
      theBit=mid(chkcode,i,1)
      k=0
      do while k<ubound(strDigits)
          if strDigits(k) = theBit then exit do
          k=k+iCharHeight+1
      loop
      if k>=ubound(strDigits) then k=0
      theOffset = k + 1
      imageStr = imageStr + (strDigits(theOffset+iRow))&","
   next
next

imageStr = left(imageStr,(len(imageStr)-1))
Response.Write imageStr

Response.Write "};"
session("chkCode") = chkcode
%>

    在post.asp中,定义表单时,相应的代码改为:

REM 子过程,定义表单
Sub myform()
   Response.Write "<table width=500 border=1 cellspacing=0 cellpadding=5 align=center>"&_
                  "<form name=form1 method=post action=default.asp>"&_
                  "<tr height=30><td rowspan=2 width=100 align=center>验证码</td>"&_
                  "<td><input type=text name=chkcode size=10>&nbsp;&nbsp;&nbsp;&nbsp;"&_
                  "<img src=checkcode.asp width=32 height=10 border=0></td></tr>"&_
                  "<tr height=30><td>请填写文本框右侧的验证码</td></tr>"&_
                  "<tr height=30><td colspan=2 align=center>"&_
                  "<input type=submit name=Submit value=提交></td></tr>"&_
                  "</form></table>"
end Sub

    以上就是最简单的xbm型的验证码。但是这种格式的验证码,windows xp sp2的用户无法看到,原因是xp sp2取消了对xbm格式文件的支持。不过,可以通过修改注册表解决这个问题:打开注册表,找到HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Internet Explorer/Security,用右键增加一个 dword 值,改名为 BlockXBM,其值为 00000000 。改好后,重新打开游览器就可以了。也可以用文件编辑器编辑一文件,内容如下:

    REGEDIT4

    [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Internet Explorer/Security]
    "BlockXBM"=dword:00000000

    将该文件保存为扩展名为reg的注册表文件,然后双击该文件即可。
    除了xbm格式的验证码,也可以利用Adodb.Stream对象,开发出更复杂的BMP型验证码,可以从http://www.netop.cc/downloads/bmpchkcode.rar得到相关程序。利用该程序,可以生成数字、字母混合,彩色,且有彩色背景的验证码。
    对于租用空间的朋友来说,使用第三方组件受到很大限制。如果拥有自己的服务器,可以试一下利用ASP绘图组件shotgraph生成验证码,该验证码是GIF格式的,具有很广泛的通用性。该组件可从http://www.netop.cc/downloads/shotgraph.zip得到。压缩包里有详细的示例程序和说明文档。
    总之,生成验证码的办法很多,现在有很多第三方组件可以帮助你生成各种样式的验证码,上网找找看吧。

asp数字验证码源代码 <br />在这里我们用到3个页面分别是:index.asp   code.asp     display.asp   当然,名字你可以随便取,下面我们开始了:<br />一.   index.asp 中代码:<br /><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><br /><html xmlns="http: 阅读详情

相关推荐

ASP.NET生成验证码

首先,添加一个一般处理程序 注释很详细了,有不懂的欢迎评论 using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Web; using System.Web.SessionState; namespace Project_Practice { ...

南 墙 9352

ASP生成二维码代码

ASP生成二维码,不过不好用,还是DEMO版本,建议需要的下载参考一下就行了,没有实用价值。

ASP.NET MVC 登录验证码

图片验证码HTML页面: &lt;div style="float: left; width: 65%"&gt; &lt;input class="ipt" id="verifycode" maxlength="4" type="text" placeho

yanggk的专栏 4173

验证码ASP源代码

ASP页面中生成图片验证码,需要用到System.Drawing命名空间下的很多类,首先我们需要新建一个CreateImage.aspx页面,在后台代码中定义用于生成验证码图片的方法,如下:{{//产生4位验证码//用于验证}////// 产生验证码/////////{i++){//一个大于或等于minValue 且小于maxValue 的32 位带符号整数,即:返回的值范围包括minValue 但不包括maxValue。如果。

shengyin714959的博客 771

ASP.NET C#实现验证码制作

ASP.NET网页开发中,验证码是一种常见的用于验证用户输入的机制。在实际应用中,我们通常还需要添加验证码的验证逻辑,以验证用户输入是否生成的验证码一致。这可以通过在用户提交表单时,将用户输入的验证码生成的验证码进行比较来实现。当用户点击刷新按钮时,会生成一个新的验证码,并将其显示在页面上的图片控件中。首先,我们需要在ASP.NET网页中添加一个用于显示验证码的图片控件和一个用于刷新验证码的按钮。接下来,我们需要在后台代码中生成验证码的逻辑。中,我们将生成随机的验证码,并将其绘制到图片控件上。

TzData的博客 519

ASP.NET中制作简单验证码(C#)

这是一个简单的ASP.NET验证码制作示例。请注意,这只是一个基本的实现,实际应用中可能需要更多的安全性和验证机制。在ASP.NET中,我们可以使用C#编写代码来制作一个简单的验证码。首先,创建一个新的ASP.NET Web应用程序项目。你将看到一个包含验证码图像和文本框的页面。每次刷新页面或点击提交按钮时,都会生成一个新的验证码。在项目中添加一个新的ASPX页面,用于显示验证码。步骤3:在ASPX页面中添加HTML和C#代码。步骤4:在代码文件中添加生成验证码的逻辑。方法用于在页面加载时生成验证码

WELL_CODER的博客 469

asp程序生成数字验证码

asp 程序生成数字验证码

380

ASP.NET-实现图形验证码

本文介绍了如何使用C#和ASP.NET创建一个简单而有效的图形验证码系统,包括生成随机验证码、绘制验证码图像以及将图像输出到客户端等步骤。ASP.NET实现图形验证码能够增强网站安全性,防止机器人攻击。通过生成随机验证码并将其绘制成图像,用户在输入验证码时增加了人机交互的难度。这种验证码系统对于保护网站免受恶意攻击和机器人恶意行为具有重要意义。

踏雨歌青春,诗酒趁年华 3091

ASP验证码的完整实现下载

ASP提供了丰富的内置对象集合,使得开发者可以方便地控制应用程序的行为和数据流。以下是几个在验证码开发中常用的ASP内置对象及其功能介绍::用于获取客户端的请求信息,例如表单数据、URL参数或Cookie等。:负责向客户端发送响应,可以包含HTML、文本、图片等内容。:用于在单个用户的多个页面请求间保持信息,常见用于存储用户会话数据,如验证码值。:允许跨多个用户共享信息,例如验证码的验证失败次数限制等。

weixin_36151775的博客 994

asp中使用图片验证码的方法

作者:Loster(OICQ:181306) 如果转载,请勿去掉此行,谢谢。现在许多网站的登陆都需要输入验证码验证码一般都是以图片的形式显示的。这样一来,能提高登陆的安全性,防止暴力猜解密码。为何要用图片显示验证码?试想,如果只是生成文本的验证码,破解人可以利用类似于小偷的技术,先把你这个页面读取,然后分析出验证码,最后进行暴力猜解。这样的话,验证码就没有任何实际意义了。废话少说,下面我就开

YXCC的专栏 3045

ASP.NET中登录页验证码的实现

在做一个登录页时,我们通常需要设置验证码,防止非法人员通过其他手段非法登录。在做一个页面的验证码时,我们需要先建立一个Active的Web页面,来随机的产生数字和字母,同时把产生的数字存储在Session中,传递给登录页,用来验证。并且定义一个画板,在Active页面绘出验证码的背景颜色,在Active页面的代码如下: protected void Page_Load(object sende

强子的专栏 1万+

asp程序添加验证码

有很多人需要,也有很多人问了,我记得在一个帖子中做了详细回复的。现在再整理出来!1、下载文件 imgchk.rar 该压缩包为 imgchk 文件夹 ,其中有三个文件:validatecode.asp,validatebody.fix,validatehead.fix主要即是为生成 验证码 服务的。将解压文件夹直接释放在需要在某页添加验证码的同目录下(比如 addnew.a

loyos的专栏 3156

ASP.NET验证码的生成

新建一个类用来创建验证码代码如下: using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.T...

wuke666666的博客 947

ASP.NET实现邮箱发送验证码

*ASP.NET实现邮箱发送验证码 一:先在前台添加一个button按钮,用来点击发送验证码 二:封装一个类实现邮箱发送验证码 public class Email { /// /// 发送者 /// public string mailFrom { get; set; } /// &lt;summary&gt; /// 收件人 /// &l...

ThreeYearTwo的博客 4962
上一篇: 数据验证之完整示例
netops
博客等级 码龄22年 1粉丝 7原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值