Asp net中图片验证码的设计与实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中图片验证码的设计与实现

摘要:图片验证码已成为许多主流网站用来防止非法用户自动注册、登录、灌水的一种有效手段。该文在介绍了验证码原理、技术的基础上,给出了在中设计图片验证码的方法。

关键词:图片验证码;;session

中图分类号:tp311 文献标识码:a 文章编号:1009-3044(2013)11-2598-03

当今的互联网环境下,基于软件的安全性防护是软件开发人员必须考虑的一个重要问题。在传统的网站登录界面中基本上只需要填写好用户名和密码来与数据库中的用户信息进行比从而确定是否

允许该用户登录,但非法用户无处不在,攻击方式和手段数不胜数,如机器人程序自动登陆、批量注册、暴力破解密码、截获用户名和密码等导致传统方式中网站安全性不高。因此,把好系统登陆这一关极为重要,目前很多web页面采用一种安全防御技术,在登陆系统时不但要填写用户名和密码,还要输入验证码,在很大程度上增强了系统登录的安全性。

1 验证码技术介绍

1.1 常见的验证码类型

目前的网站中使用的验证码类型有:文本验证码、图片验证码、邮件验证码和手机验证码四大类。文本验证码是最原始的技术,由于安全性较低,多数网站目前已经弃用这种方式;图片验证码则采用随机生成的若干数字或字母组成一张图像,然后在图像上布满杂

点等干扰像素,或者是对字母数字进行旋转、变形、扭曲等操作,迫使用户用肉眼辨认出图片中的一串符号并手工输入到文本框,连同用户名和密码一起提交到服务器进行验证,三项信息全部验证成功才能登录系统;邮件验证码需要用户在网页中输入自己的电邮,系统将验证码通过邮件这种途径推送到用户邮箱中,从时间成本和工作效率来看,这种形式相对而言要麻烦些;手机验证码需要用户输入手机号码来接收网站发送的验证码信息,由于涉及到个人的电话信息,容易遭到用户的排斥,除银行等安全级别较高的服务网站外,大多数的网站不会采用这种方式。因此基于安全性和时效性等方面的考虑,图片验证码是较为适合绝大多数网站的一种方式。

1.2 图片验证码的原理

当用户在客户端浏览器提交网页请求时,请求会被iis提交到web 服务器,web服务器会对请求信息进行分析,查找相应的用户登录页面,然后执行该页面的代码文件(.aspx.cs)生成5位随机的无规律的数字或字母组成的字符序列,把随机字符序列写入到服务器端内存的session中或者客户端硬盘上的cookie中,并将该字符序列加载到布置了干扰因素的图片中,然后发送该图片至客户端的浏览器进行显示,由用户肉眼识别,若用户看不清楚,可单击链接更换验证码内容。

虽然在理论和技术的角度讲验证码的字符序列既可以存入服务器端也可存入客户端,但从安全角度而言,存入服务器端的session 中更为妥当。这是因为cookie是存储于客户端的硬盘中,很容易

被非法用户获取后进行系统的非法登录,而session是位于web服务器端,服务器通常有其完善的安全性方法措施,更不容易被非法用户破解。且验证码图片的内容是随机的,杂点的分布、字符的变形操作都是随机的,再加上电脑的图像识别技术要低于人脑,非法程序难以辨认这些不规则的字符,除非非法用户亲自辨认,每测试一次密码都需要手工输入验证码,大脑是很难胜任成千上万次的重复性劳动的,从而有效的阻止了非法用户的入侵。

2 图片验证码的关键技术与实现

在页面上使用图片验证码主要包括两个方面的技术:一方面是随机产生图形验证码;另一方面就是在用户界面上对用户输入的验证码进行验证。因此验证码技术的实现需要“验证码图片生成”页面和“用户登录页面”两个web页面,两个页面分别命名为checkcode.aspx和login.aspx。

第一步:通过函数generatecode使用.net framwork中的随机数生成器生成一个5位的包含数字和英文字符的文本,并把验证码保存在session中供使用。

private string generatecode()

{

int number;

char symbol;

string testsymbol=string.empty;

system.random bitary = new random();

for(int i=0; isystem.drawing.bitmap picture=new system.drawing.bitmap((int)math.ceiling

((testsymbol.length * 16)), 25);

graphics g = graphics.fromimage(pitcure);

}

第三步:绘制验证码后在图片上随机地制造干扰因素来混淆图片内容。这些干扰因素的面积占图片面积的35%,能严重干扰程序辨认验证码文本。但人脑能比较轻松地排除这些干扰。图片生成后页面就使用gif格式将图片文档发送到客户端。

private void createdisturb ()

{

random bitary= new random(); //产生随机数字

g.clear(color.white); //将图片背景色清除

for(int k=0; k<35; k++) //产生干扰线条

{

int x1 = bitary.next(picture.width);

int x2 = bitary.next(picture.width);

int y1 = bitary.next(picture.height);

int y2 = bitary.next(picture.height);

g.drawline(new pen(color.yellow),x1,y1,x2,y2);

}

for(int k=0;k<120; k++) //产生干扰字符辨识的杂点

相关文档
最新文档