LOADING

加载过慢请开启缓存 浏览器默认开启

验证码识别绕过

前言

本篇文章主要介绍传统图形验证码绕过方式和防护手段,以及防护方面的思考。文章仅供学习,作者不鼓励、不支持任何未经授权的系统测试、数据获取或安全绕过行为。

示例

当发现网站验证码比较简单没有什么干扰比如

就可以尝试找到网站的验证码响应
然后保存下来利用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风控和风险评分系统在用户使用过程中影响较小,但是可能会对用户造成误伤,还有在使用过程中会增加维护成本。