春运又称"年度全球最大规模的人口流动",是一部"人民的斗争史",起初只是与黄牛斗智斗勇,后来为了整治黄牛12306不断升级验证码,于是大家开始了与验证码斗智斗勇。那么这种验证码是否是必须的?且看小编对Web安全之验证码的解读。
为防止服务器端的资源被客户端的计算机程序滥用或攻击,服务器需要区分当前用户是计算机还是人类,一般在网站的关键操作位置都会采用验证码技术来区分。围绕验证码展开的攻防技术在Web安全中有着重要地位,本文将从验证码的工作原理出发,介绍验证码实现上容易产生的问题,并对其攻防技术现状和未来做一个简要介绍。
前言
全自动区分计算机和人类的图灵测试(Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCHA),俗称验证码,是一种区分用户是计算机或人的全自动化程序。在CAPTCHA测试中,作为服务器端的计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。
在以前的网络访问中,还不存在验证码的用法,但由于网络更加深入地融合到人们的生产生活中,暴力猜测登陆,垃圾广告贴等在网络中泛滥,消耗了大量的服务器资源同时也可能威胁到服务器的安全,验证码作为一种实用高效技术被大量使用起来。
Web安全的攻击与防护技术一直是互相促进的,验证码识别技术的不断发展推动着验证码生成技术的提高。本文将从验证码技术的原理出发,介绍验证码容易出现的问题以及相关识别技术,以使读者对验证码攻防技术有一个了解。
工作原理
常见的图形验证码是与web中的会话相关联的,在一个会话开始时,在需要使用验证码的地方会生成一个与当前会话相关的验证码,用户识别出验证码后通过填写表单将数据提交给服务器,服务器端会验证此次会话中的验证码是否正确。具体来说,其工作流程如图1所示:
对用户方来说,用户访问起始页面,识别返回页面中的验证码,在输入验证码和其他信息后提交表单,在服务器处理后可查看到当前操作是否成功。
服务器在接收到用户对初始页面的请求后,会自动创建一个新的会话,同时生成验证码来关联这个会话,并且生成用户可见到的验证码图片,最后这些页面返回到用户的浏览器上,用户此时可看到完整的页面;在接到用户提交的表单请求时,服务器会比较用户提交的验证码值并与之前存储在此会话下的验证码值做比较,如果一致判断验证码是正确,否则认为提交的验证码是错误的,可能是客户端是计算机或者用户识别错误。服务器端进行这些处理后将处理结果反馈给用户。如果提交的验证码是正确的,则按照预定流程进行下一步骤,否则回到需要用户输入的那个界面上。
存在的问题
验证码作为区分人与机器的一道重要屏障,与之相关的对抗技术一直在WEB安全研究上有着重要意义。图片验证码生成算法以及程序实现流程上都有可能带来问题,容易被攻击者突破。
图片验证码的生成可能存在如下问题:
1) 图片验证码的字符空间小
如果选取的字符空间较小,则让验证码识别变得相对简单。字母数字组合的字符集比单纯为数字的字符集效果要好。
2) 图片中的字符规则
字符进行变形,扭曲不利于程序的识别,而对人眼识别是无障碍的,但此方法对生成程序来说有一定的难度。
3) 图片中缺少干扰图案
干扰图案能有效增加验证码的识别难度,并且对生成程序来说代价小。
在验证码的程序实现流程方面可能存在如下问题:
1) 验证码固定
一般地,用户在开始访问初始页面时,浏览器会向服务器发起页面请求,服务器此时创建会话,同时返回的页面里会嵌入验证码图片地址,浏览器在加载响应页面后,会自动加载验证码图片地址。服务器在接收到验证码图片地址的请求时,会对当前会话生成一个对应的验证码并且返回验证码图片。用户此时根据就可根据验证码图片信息填写表单数据来进行后面的操作,这时,服务器如果检验出提交的验证码是错误的,服务器会返回页面提示错误然后跳转到初始页面,因初始页面内嵌了验证码图片地址,浏览器再次自动刷新验证码页面。
如果验证码输入错误,会在上面的流程里自动刷新验证码,正常情况下,这个过程看起来是没有问题的。但是,由于HTTP请求响应式的工作原理,使得攻击者有可能控制验证码生成页面请求不被触发,使得在服务器上同一会话内,服务器端保存的此会话下的验证码一直有效。
基于此,服务器端的正确处理应该是在验证码检验失败时,就需要设置此验证码失效,同时对生成的每一个验证码也需要设置有效期。
2) 验证码的字符串值出现在返回的响应中
这是属于程序编码考虑不当导致,比如忘记注释掉调试信息导致。验证码可能出现在响应包中的Cookie, URL, 页面注释,甚至验证码在展示的时候直接就是文本方式,这样就完全失去了使用验证码的价值了。
3) 验证码长度可指定
在页面上存在参数可指定验证码的位数,这可简化识别工作。此问题的出现也可能是调试的需要,并发布时忘记注释掉相关代码而导致。
对抗现状
自验证码技术问世以来,其成为自动化程序运行的第一大敌人。在利益的驱动下,突破封锁技术自然也会产生。一般来说,验证码的对抗技术有如下几个方面:
(1)避免触发验证码
验证码的引入会带来用户友好度的下降,增加验证码输入以及人眼对验证码识别的可能错误等都会带来不好的使用体验。这对追求用户体验的网站来说,在没遇到可疑行为时,其采取的策略是默认不开启验证码功能,当触发可疑行为识别规则时,才会出现验证码。基于此原理,对攻击方来说,就是尽量避免触发可能出现验证码的规则。一般可疑行为识别是通过检查频繁尝试并且出错这个行为来进行,基于此的对抗措施则是使用不同的IP来进行尝试,或者等待足够的时间再次尝试,这样让目标网站程序认为这些尝试都是正常的访问请求,从而在自动化程序端连续作业时不会出现验证码而达到绕过的目的。
(2)验证码固定
从前面的验证码固定问题描述可看出,攻击者可以在同一个会话下,在获得第一个验证码后,后面不再主动触发验证码生成页面,并且一直使用第一个验证码就可循环进行后面的表单操作,从而绕过了验证码的屏障作用。
(3)验证码机器自动识别
计算机自动识别验证码,主要原理是通过一定的算法预先建立验证码范围内的字体特征库,再将要识别的验证码通过同样的算法生成特征,与之前保存的特征库进行比较,进而得到图片验证码的值。
一般地,其识别过程有如下图所示的处理流程:
没有评论:
发表评论