验证码作为一种辅佐安全手法在Web安全中有着特殊的地位,验证码安全和web应用中的很多漏洞相比好像微不足道,可是千里之堤毁于蚁穴,有些时候如果能绕过验证码,则能够把手动变为主动,关于Web安全检测有很大的协助。
全主动区别核算机和人类的图灵测验(英语:Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCHA),俗称验证码,是一种区别用户是核算机和人的公共全主动程序。在CAPTCHA测验中,作为服务器的核算时机主动生成一个问题由用户来回答。这个问题能够由核算机生成并评判,可是必须只要人类才干回答。由于核算机无法回答CAPTCHA的问题,所以回答出问题的用户就能够被认为是人类。(from wikipedia)
大部分验证码的设计者都不知道为什么要用到验证码,或许关于怎么检验验证码的强度没有任何概念。大多数验证码在完成的时候只是把文字印到背景略微复杂点的图片上就完事了,程序员没有从根本上了解验证码的设计理念。
验证码的形式多种多样,先介绍最简略的纯文本验证码。
纯文本验证码
纯文本,输出具有固定格式,数量有限,例如:
•1+1=?
•本论坛的域名是?
•今天是星期几?
•复杂点的数学运算
这种验证码并不契合验证码的定义,因为只要主动生成的问题才干用做验证码,这种文字验证码都是从题库里选择出来的,数量有限。破解方式也很简略,多刷新几次,建立题库和对应的答案,用正则从网页里抓取问题,寻找匹配的答案后破解。也有些用随机生成的数学公式,比方 随机数 [+-*/]随机运算符 随机数=?,小学生水平的程序员也能够搞定……
这种验证码也不是一无是处,关于很多见到表单就来一发的spam bot来说,真实没必要单独为了一个网站下那么大功夫。关于铁了心要在你的网站大量灌水的人,这种验证码和没有一样。
下面讲的是验证码中的重点,图形验证码。
图形验证码
先来说一下根底:
辨认图形验证码能够说是核算机科学里的一项重要课题,涉及到核算机图形学,机器学习,机器视觉,人工智能等等高深范畴……
简略地说,核算机图形学的主要研讨内容就是研讨怎么在核算机中表示图形、以及使用核算机进行图形的核算、处理和显现的相关原理与算法。图形通常由点、线、面、体等几许元素和灰度、色彩、线型、线宽等非几许特点组成。核算机涉及到的几许图形处理一般有 2维到n维图形处理,鸿沟区别,面积核算,体积核算,歪曲变形校对。关于色彩则有色彩空间的核算与转换,图形上色,阴影,色差处理等等。
在破解验证码中需要用到的常识一般是 像素,线,面等根本2维图形元素的处理和色差剖析。常见工具为:
•支撑向量机(SVM)
•OpenCV
•图画处理软件(Photoshop,Gimp…)
•Python Image Library
支撑向量机SVM是一个机器学习范畴里常用到的分类器,能够对图形进行鸿沟区别,不过需要的背景常识太高深。
OpenCV是一个很常用的核算机图画处理和机器视觉库,一般用于人脸辨认,跟踪移动物体等等,对这方面有爱好的能够研讨一下
PS,GIMP就不说了,说多了都是泪啊……
Python Image Library是pyhon里面带的一个图形处理库,功用比较强大,是咱们的首选。