网页验证码技术及基于ASP的实现

时间:2022-09-24 02:28:46

网页验证码技术及基于ASP的实现

摘要:网页验证码技术是目前各类网站防止机器人程序自动注册和登录等攻击的有效方法,阐述了验证码的作用及实现原理,并通过实例给出基于ASP环境下的几种常见验证码的具体实现方法。

关键词:验证码;ASP;网络安全;shotgraph组件;AspJpeg组件

中图分类号:TP393文献标识码:A文章编号:1009-3044(2012)03-0552-03

Web Verification Code Technology and Implementation Based on ASP

WEN Wei-fang

(Zhongshan Secondary Specialized School,Zhongshan 528458,China)

Abstract: Web verification code technology is an effective method against attack of auto-login and auto-registry from Robot programs,expounds the role of verification code and implementation principle, And through the examples based on ASP environment of several com? mon concrete realization method of the verification code.

Key words:verification code; ASP; internet security; shotgraph component; AspJpeg component

Web网站验证用户的合法性的传统方法是要求用户在客户端登录界面输入用户名和密码,提交到服务器端后再确认其合法性。但是一些别有用心的用户或黑客利用机器人程序自动地进行登录、批量注册,攻击者可以使用这些帐号为其他用户制造麻烦,如发送垃圾邮件或通过同时反复登录多个帐号来延缓服务速度。攻击者也可通过象穷举法密码破解和字典密码破解之类的攻击方法来自动探测合法的用户名和密码,从而对网站安全构成很大的威胁。

网页验证码技术正是为了防止机器人程序进行此类攻击而提出的,目前几乎所有网站在用户登录和注册时都采用了验证码技术。

1网页验证码的作用及实现原理

网页验证码就是在常规的用户名和密码上再加一层确认,所谓验证码,其实是指随机产生的一组数字或符号,或者随机生成的包含多个数字与符号信息的一幅图片,有的图片里可能还会加上一些干扰像素(用于防止OCR),由用户肉眼识别其中的验证码信息,然后手动输入表单提交网站验证,验证成功后才能使用某项功能(例如网站登录、注册等)。因此,验证码的作用就是迫使用户人工识别、手动输入验证码,即用户被迫手动登录和注册。从而防止攻击者进行编写机器人程序自动注册、恶意灌水、重复登录暴力破解密码等各类网络攻击活动。

网站服务器端将按一定算法随机生成的验证码字符串保存在内存中(一般是Web系统中的Session对象),然后将该字符串写入图片,发送给浏览器端显示.在浏览器端,用户输人图片验证码上的字符串,然后提交给服务器端,服务器端将用户提交的字符串和服务器端保存在Session对象中的字符串进行比较,判断是否一致,如果一致就继续执行下面的代码段,从而完成后续操作,否则就无法使用后继功能。由于验证码是随机产生的,每次请求都会产生不同的字符串,攻击者无法从浏览器端提取出验证码信息,难以猜测其具体内容,这样就实现了阻挡攻击的目的。

2网页验证码的ASP实现方法

从验证码的发展的历程来看,验证码的形式主要有三类,分别为文本形式验证码、图片形式验证码以及添加了干扰信息的图片形式验证码。

ASP是活动服务器页面(Active Server Pages)的简称,是微软公司开发的服务器端的脚本编写环境。使用ASP可以创建动态交互的Web页面和基于Web的应用程序。由于ASP具有开发速度快、语法简单易学、开发环境简洁灵活、互联网相关资源丰富等特点,在ASP、、PHP、JSP等多种网站开发工具百家争鸣的新形势下,它依旧是当前各种中小型网站中使用最广泛的Web开发工具之一。

下面就通过实例来分别介绍在ASP中如何实现各类验证码。

2.1文本形式验证码的实现

文本形式验证码是早期的网页验证码,就是利用随机函数随机生成一定长度的数字或字母串,然后显示在浏览器端页面上。ASP代码段一:生成四位纯数字验证码

num1=4 ’验证码的位数

for i=1 to num1

Randomize ’初始化随机数发生器

vcode1=vcode1&Int((9*Rnd)) ’rnd是随机数,这里得到0到9之间的随机整数,vcode1存储验证码

next

response.write vcode1 ’输出4位纯数字验证码

%>

ASP代码段二:生成数字与字母混合验证码

chars="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z" ’将10个数字和26个大写字母组成一个字符串yc=split(chars,",") ’将字符串生成数组共有35个字符

num2=4 ’验证码的位数

for i=1 to num2

Randomize

vcode2=vcode2&yc(Int((35*Rnd))) ’数组一般从0开始读取,所以这里为35*Rnd

next

response.write vcode2 ’输出4位数字与字母混合验证码

%>

以上两段代码只需直接添加到页面的相关位置,即可产生如图1所示的结果。

图1文本形式验证码

文本形式的验证码实现方法相对简单,但是其安全效果也是比较差,因为攻击者能够比较轻易地从页面提取到文本验证码,从而实现对网站入侵与攻击。

2.2图片形式验证码的实现

图片形式验证码是指将随机函数随机生成的数字或字母串嵌入到各种格式的图片中,然后显示在浏览器端页面上的是图片形式的各种字符。由于图片验证码是以点阵图片的方式而不是文本方式呈现给用户的,网页攻击者就不容易直接读到验证码了,从而具备较好的安全性。

当然由于ASP本身不具备生成图片的功能,所以通常的解决方案有两种,一种是借助ASP的第三方组件,比较常用的有ASP图象组件shotgraph,借助shotgraph组件可以将文本型字符转换为图片形式进行呈现;另一种是通过分解出BMP图片文件格式的文件头与文件数据部分,然后利用ADODB.Stream将对象进行二进制流处理后再结合BMP的文件协议来生成新的图像并显示在浏览器上。

借助图象组件shotgraph来实现图片验证码的ASP较为简单,当然前提是在Web服务器端已经注册好相应的shotgraph组件。

将前文的代码段二中的最后一行“response.write vcode2”替换为如下代码,即可将随机生成字符转换成图片形式的输出,从而实现的图片形式的验证码。

Response.Clear

Response.ContentType="image/gif"

set obj=Server.CreateObject("shotgraph.image") x=55 ’输出图片的宽y=26 ’输出图片的高obj.CreateImage x,y,8

obj.SetColor 0,55,126,222

obj.SetColor 1,0,0,0

obj.CreatePen "PS_SOLID",1,0 obj.SetBgColor 0

obj.Rectangle 0,0,x-1,y-1

obj.SetBkMode "TRANSPARENT"

obj.CreateFont "Arial",136,18,1,false,False,False,False obj.SetTextColor 1 obj.TextOut 8,4, vcode2&" " img=obj.GifImage(-1,1,"") Response.BinaryWrite (img)

运行效果如图2所示,得到的是一个蓝底黑字的BMP图片格式的验证码。

图2图片形式验证码1

对于第二种方法的实现,我们也在此做个简要说明,这里以输出4位随机数字BMP图象验证码为例:我们可以事先准备好两个BMP的衍生格式文件head.fix和body.fix,其中是head.fix(54byte)的BMP协议的头文件,body.fix是数字0-9以10X100竖排的RGB阵列数据(3200byte)。ASP代码的实现思路是:利用ADODB.Stream将对象进行二进制流处理,先将随机生成的四位数字放入Session,然后再对数字进行处理。将数字转换为图像阵列数据中对应的数据块,最后利用ADODB.Stream将数字与BMP的协议相结合生成一个新的BMP图像,将此图像直接显示在浏览器上即可。实际运行效果如图3所示:

图3图片形式验证码2

2.3添加干扰信息的图片形式验证码

普通的图片形式验证码虽然相比文本形式验证码在安全性上有了很大的提高,但是由于其特点是:字体固定,字符位置不定,字符无变形。所以还是比较容易被各种OCR工具识别与破解。为了增加验证码的安全性,还应该为图片加上更多的组合干扰信息,包括有添加干扰点、干扰线、改变字符大小与位置、字符扭曲、不同颜色和底纹的图片背景等。

下面是通过借助另一款功能更加强大的Persits.jpeg的ASP组件来实现包含多项组合干扰信息的图片形式验证码,ASP代码的设计思路是:用图片格式显示随机码,即在服务器端通过Persits.jpeg组件(要求服务器先安装好该组件)将随机产生的验证码字符画在带有干扰点的背景图片上,把该图片放置在网页上,在客户端显示出来的是一幅带有干扰因素的图片;另一方面,在服务器端准备好多张背景图片,这些背景图片的格式、颜色、花纹等干扰方式各不相同,每次随机抽取其中一幅作为背景。

限于篇幅关系,只列出部分关键代码。

Option Explicit

Session.Timeout = 3 Randomize Dim jpeg

Dim pixelsAcross,textColour,CodeTotal

Dim sessionnaem

Dim randomNumber:randomNumber = Int(Rnd * 7)+1

sessionnaem = "GetCode"’验证码全局变量名称设定CodeTotal = 4’验证码个数

textColour = randomFomtcolor(randomNumber)’文字颜色

pixelsAcross = Int(Rnd * 40)+3 ’验证码缩进距离

Set jpeg = Server.CreateObject("Persits.jpeg") ’创建一个jpeg对象

drawBackGroud randomNumber,200,60 ’打开随机背景图片

doString ’绘制字符

drawLines’绘制随机线drawCircle’绘制随机圆’drawBar ’绘制随机矩形

jpeg.SendBinary’返回的二进制,申明本页为一个JPEG图片类型Set jpeg = Nothing

……

’函数(drawBackGroud):打开背景图片,背景图片中也包含各种渐变色及丰富的底纹与图案等干扰信息Function drawBackGroud(srandom,swidth,sheight)

Jpeg.Open Server.MapPath("background/background"&srandom&".jpg") Jpeg.Width = swidth Jpeg.Height = sheight

End Function

’函数(drawLines):绘制随机线

Sub drawLines

jpeg.Canvas.Pen.Color = &HADCD3C

jpeg.Canvas.DrawLine 0, Int(Rnd * jpeg.Height), jpeg.Width, Int(Rnd * jpeg.Height) End Sub……

%>

实际运行效果如图4中各小图所示:

图4添加干扰信息的图片形式验证码

实验证明:通过添加多项组合干扰信息的图片形式验证码,加大了通过识别工具来解读图片上字符的难度,从而使得验证码的安全性得到显著的提高。

3结束语

基于Web方式的用户验证在各种Internet应用服务系统中应用广泛,但仅通过用户名、口令比较作为认证手段不够安全,通过引进网页验证码的方式,可以显著增强认证系统的安全性,而且这种方法易于实现,简单实用。不过网页验证码技术虽然能够有效地防止机器人程序的自动登录等攻击,可也不可能完全地阻止,只是增加攻击者的难度。如果要更有效地防止在线穷举式的攻击,进行帐户锁定是最有效的一种方法,也就是在用户若干次输错密码后(一般3次),锁定该帐户一段时间,使在线破解攻击失效。另外,随着验证码技术的成熟,还可以进一步将验证码扩充到整个可打印字符的范围内来加大被破解与识别的难度。

参考文献:

[1]洪伟铭.验证码的原理及实现方法[J].武汉科技学院学报, 2007,20(4):17-19.

[2]张宁林,刘瑞挺,侯冬梅.ASP技术实用教程[M].北京:清华大学出版社,2008.

[3]韩玉民.验证码技术研究及基于的实现[J].现代计算机:下半月版,2009,8:116-118.

[4]杨彬.Web自动化测试中验证码的实现方法[J].信息技术与标准化,2010(11):39-41.

上一篇:485通信在纺织车间集散型生产管理与监控系统中... 下一篇:浅谈网络信息安全与防范研究