验证码的作用就是为了强制人机交互,但是几乎所有的图片验证码都存在安全性问题,可以被机器轻易破解。
现在主流的验证码识别技术就是图像识别,如果说我做一个无图验证码是不是就能很大程度上防止机器破解呢?没错,就是canvas验证码。
其实现原理如下:
1、后端把生成的图片验证码转成base64,然后通过人工混淆加密,例如把base64里面的字符A替换成 一 ,然后在把g替换成A,加密和替换规则自己定。
2、前端通过ajax请求得到该加密后的base64,然后通过前后端约定的规则进行解密,此规则是前后端私下定好的,不用网络传输。
3、将解密后的base64放到canvas里面,这样用户就可以看到验证码了
4、将所有处理验证码的js自定义混淆加密
5、canvas原型里面的生成图片的方法删掉防止别人利用控制台将canvas转成图片
6、交给大家自由发挥
这种验证码的好处是:
1、无图机器无法识别
2、就算你得到那段加密后base64,也很难破解,因为你很难从加密后的js中找到base64的加密规则
3、加密混淆规则是自己定的没有规律可寻
4、此验证码灵活多变,就算被破,也能很快找到问题原因进行安全修复