DBMNG数据库管理与应用

科学是实事求是的学问,来不得半点虚假。

web验证码做验证程序需要注意的一些地方

网站的验证码是为了检查客户端的操作者是人,而不是机器人,的一项功能。但在代码书写的时候,程序员处理不当,可能造成验证码形同虚设。在注册功能上,验证码功能失效会造成批量注册漏洞;在登录功能上,验证码功能失效会造成暴力破解漏洞。
根据我的经验,在写验证码的验证程序时,通常注意以下几点:
1,不允许用户输入空的验证码,
在需要检查用户重复操作的方法中,遇到用户输入了空的验证码,立即返回。这是因为,空的验证码很有可能是黑客不经过前台页面直接把数据提交给后台处理程序的结果。
这里用一个注册程序举例:前台页面 reg.html 后台页面 reg.aspx
现在假设reg.aspx没有检查用户输入的vcode(验证码)是空的情况。
攻击方法:写程序直接把数据提交到reg.aspx,而不经过reg.html,这时存在COOKIES或SESSION
里面的验证码为空,提交的验证码也设为空,这时验证码都为空,则注册成功。
程序反复提交注册数据,则形成批量注册漏洞。
修补方法:reg.aspx中检查用户输入的验证码,如果为空,则返回。


2,如果使用COOKIES存储验证码,不能使用明文。
对于黑客来讲,COOKIES是看得见摸得着的,只要在地址栏里输入javascript:alert(document.cookie);
就能看到当前站点的COOKIES信息。如果COOKIES以明文存储验证码,那黑客仍然可以编写程序获得这个
验证码,进行反复提交,验证码功能还是形同虚设。如果使用SESSION,则可避免这个问题,然而SESSION
的使用一直很有争议。还以上面的例子。
攻击方法:写个带有WEBBROWSER的程序,使WEBBROWSER定位到reg.html,执行一个把COOKIES中验证码写到
对应输入框的JS,填写其他注册信息,就可以反复提交了。
修补方法:使用DES加密验证码后,存储这个密文到客户的COOKIES里,检查时解密这个密文进行比对。不建
议使用MD5加密,因为MD5的方法使用的多,很容易被黑客发现,由于验证码通常比较短,所以MD5的密文很容易被黑客破译。
3,用户操作成功后立即删除验证码COOKIES或SESSION,避免用户使用同一验证码进行重复操作
攻击方法:如果操作成功没有删除验证码,黑客可以重复提交这一个验证码,即可以手动输入第一个验证码,之后始终重复提交此验证码。
修补方法:操作成功后删除存在COOKIES中或SESSION中的验证码,即置为空。
4,如果使用COOKIES,验证码与IP的对应列表应存在服务器一份。
这个方法是为了防止COOKIES欺骗。即,黑客可能提交了一个伪造的COOKIES验证码。
攻击方法:可以使用HOSTS文件的解析功能伪造一台与被黑主机同一根域名的主机。使用伪造的主机写入COOKIES然后再提交这个验证码到直正的被黑主机。攻击的另一个方法是直接写SOCKET程序提交自己写的任意COOKIES,这样无论怎样加密,攻击者只需要一对COOKIES验证码密文和输入验证码的明文,就可以实现重复提交。
修补办法:A使用SESSION(注意效率)B把验证码的IP与验证码明文存储在服务器一份(存在CACHE或数据库中),这样验证的时候,如果服务器的列表中不存在此IP或验证码明文,则认为是黑客行为,不准进行操作。


做到以上四点,验证码部分就可以认为是基本安全的了。

本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号