前言
本篇文章主要介绍传统图形验证码绕过方式和防护手段,以及防护方面的思考。文章仅供学习,作者不鼓励、不支持任何未经授权的系统测试、数据获取或安全绕过行为。
示例
当发现网站验证码比较简单没有什么干扰比如
就可以尝试找到网站的验证码响应
然后保存下来利用EasyOCR识别验证码,这里放一个示例脚本
from PIL import Image
import numpy as np
import easyocr
reader = easyocr.Reader(['en'], gpu=False)
def recognize(path):
img = Image.open(path).convert('RGB')
arr = np.array(img)
res = reader.readtext(arr)
return ''.join([item[1] for item in res])
if __name__ == '__main__':
img_path = input("请输入验证码图片路径(支持拖拽):").strip().strip('"')
try:
code = recognize(img_path)
print(f"识别结果:{code}")
except Exception as e:
print(f"出错:{e}")
成功识别该验证码
作用
一些网站为了防止绕口令爆破会使用验证码进行防护,示例中虽然只验证了单次识别验证码,但是配合其它代码可能降低自动化请求的成本。
验证码失效原因
验证码样式过于简单,无干扰元素或干扰元素较弱(背景单一,干扰线无或过少,固定字体,格式统一)
如何进行防护
可能影响用户体验:
1、添加更多干扰元素减少识别成功率
2、改用滑块或行为验证码
对用户体验影响较小:
1、IP风控
2、风险评分系统
思考与总结
传统字符验证码作为独立安全措施具有较大风险,一个安全的认证需要更多手段结合构建一个完整的认证体系。滑块验证码和行为验证码在一定程度上增加了验证码的安全性,但是牺牲了用户体验(增加用户验证时长,增加用户操作步骤)。IP风控和风险评分系统在用户使用过程中影响较小,但是可能会对用户造成误伤,还有在使用过程中会增加维护成本。