关河 发表于 2005-10-18 12:32:09

如何解决WEB性能测试中的验证码问题

<SPAN id=zoom>&nbsp;
<P>现在越来越多的网站为了安全性或是防止Spam的侵害,采用了验证码的校验技术。简单地说,验证码就是在进行登录或是内容提交的时候,页面上会随机出现一个人工可识别,但机器不可识别的验证字符串(一般是采用背景、扭曲等方式产生的图片),要求登录或是提交内容时同时输入这个验证码。</P>
<P>验证码可以有效防止对口令的刺探和所谓的网络推广软件带来的大量的Spam内容,目前已经被许多Internet或是Intranet应用接受为标准的实现方式。但对性能测试来说,这种验证码又带来了很大的问题。</P>
<P>最突出的问题是,性能测试工具本身是自动化工具,由于这种验证码采用的是“防止自动化工具尝试”的方法,因此,在录制了脚本之后会发现,很难对脚本进行调整,以使其适应验证码验证的需要。已经不止一次有人提到这个问题,并询问有没有较好的解决方案。</P>
<P>对这个问题,我个人的看法是,基本上可以考虑从三个途径来解决该问题:</P>
<P>1、第一种方法,也是最容易想到的,在被测系统中暂时屏蔽验证功能,也就是说,临时修改应用,无论用户输入的是什么验证码,都认为是正确的。这种方法最容易实现,对测试结果也不会有太大的影响(当然,这种方式去掉了“验证验证码”这个环节,不过这个环节本来就很难成为系统性能瓶颈)。但这种方法有一个致命的问题:如果被测系统是一个实际已上线的系统,屏蔽验证功能会对已经在运行的业务造成非常大的安全性的风险,因此,对于已上线的系统来说,用这种方式就不合适了;</P>
<P>2、第二种方法,在第一种方法的基础上稍微进行一些改进。第一种方法带来了很大的安全性问题,那么我们可以考虑,不取消验证,但在其中留一个后门,我们设定一个所谓的“万能验证码”,只要用户输入这个“万能验证码”,我们就验证通过,否则,还是按照原先的验证方式进行验证。这种方式仍然存在安全性的问题,但由于我们可以通过管理手段将“万能验证码”控制在一个小的范围内,而且只在性能测试期间保留这个小小的后门,相对第一种方法来说,在安全性方面已经有较大的改进了;</P>
<P>3、如果安全性对应用来说真的是至关重要的,不容许有一丝一毫的闪失,那我们还可以用更进一步的方法来处理这个问题。一般的性能测试工具(MI的LR、Seague的Silk performer等)都能够调用外部的DLL或是组件接口,因此,可以考虑获得“验证码验证”部分的实现,写一个验证码获取的DLL,在测试脚本中进行调用即可。</P>
<P>除了这三种方法以外,可能还会有其他的方法存在,也希望各位能提供一些其他的思路。在我的实践中,第二种方法用得比较多,对未上线系统系统的内部性能测试,有时候也用第一种方法。但要提醒的是,如果针对的是已上线系统,无论用哪种方法,测试完成后,都必须立刻将应用恢复,并对系统进行一次安全审计,以免在测试期间被他人入侵。第三种方法用得比较少,而且具体上还依赖于验证组件是否能提供这样的接口。</P></SPAN>

vinsonwu7522 发表于 2005-10-27 12:39:33

真知灼见!值得研究!

迎风 发表于 2005-10-27 13:13:29

谢谢楼主的分析与建议,真的很有借鉴与学习的地方,支持!

snail2011 发表于 2005-12-9 15:59:26

我们即将上线的系统也采用了验证码功能,正在准备性能测试呢.本想采用第一条的,现在看了楼主的文章,决定采用第二种方法了.

ilovejolly 发表于 2005-12-21 08:45:39

除非有一定规律,如果是随机产生的,那么第三种方法是不可行的

jsprite 发表于 2005-12-21 10:08:39

呵呵 谢谢楼主的资料。这个问题困扰我很久了

村上舞!舞!舞 发表于 2006-1-10 22:13:24

不错,是在实践中才能摸索出来的

图腾狼 发表于 2006-4-1 13:16:23

好啊

子淇 发表于 2007-3-22 09:46:57

不错,值得学习,谢谢楼主

langwx520 发表于 2007-3-23 11:17:23

楼主,缘分哪!

hydonlee 发表于 2007-4-5 16:18:44

实践出真知. 非常感谢楼主.

刘顺 发表于 2007-4-26 13:21:58

挺不错的建议!!!!!!!!!

冰清 发表于 2007-5-11 13:22:11

值得学习!

wgs0923 发表于 2007-7-12 14:00:56

这排版看上去真够辛苦的`
页: [1]
查看完整版本: 如何解决WEB性能测试中的验证码问题