何谓验证码?
验证码就是以图片格式将文本、数字、符号表示出来,在登录网站、发表评论时,同时将这些信息输入,以防止某些程序恶意登录、刷贴等,但也影响了某些情况下的正常程序访问。这些符号人眼很容易识别,但对计算机来说却非常不易,从而达到防范恶意程序的目的。
验证码的原理
验证码无非就是根据某些信息产生符号集,然后将这些符号集转换成图片。早期的验证码基本上都是数字加英文字母,而且生成的图片背景也比较干净,这就为一些OCR软件提供了可乘之机,通过专业的OCR软件就能轻易识别出验证码的文本信息。但从现在的应用来看,不仅背景上添加了许多杂色,而且符号也开始不工整,甚至采用了汉字,大大增加了OCR识别的难度。
实现验证码有两种主要的方式:
1. 访问页面时由jsp,aspx等脚本生成验证码图片,同时将验证码信息写入本地cookies, 可用函数加密,当页面提交时就会在本地判断cookies.code是否与你输入的验证码相等,或者与f(cookies.code)做比较,即生成的验证码是cookies的一个函数值。要破解这种方式,几乎不需要动用OCR,只要正确输入一次验证码,把这个正确的验证码及cookies记录下来,不断地用正确的cookies去替换新cookies,就可以不断的提交页面。
2, session控制。session控制与第1种的不同之处在于,对照码放在一个session变量里,提交时会将你输入的验证码与这个session变量或其函数值做比较,由于session变量是取不到的,所以破解的难度也大大增加。
以下主要针对第2种情况进行分析。
准备工作
先了解验验码的生成原理
在需要验证码的页面放如下代码,即一个输验证码的文本框和一个验证码图片,(注意是由asp脚本生成的)
<input type="text" name="validatecode" size="20"><img src="validatecode.asp"></p>
假如该页要提交到view.asp,
在view.asp中写如下代码:(sas_validatecode是任意命名的,只要与下文validatecode.asp中保持一致即可)
if(Trim(request.fo