> InnoShop CE 插件。前台登录/注册页防机器人 + 防暴力破解,全部自建实现:不接 Google reCAPTCHA、不接 hCaptcha、不接任何第三方验证码服务,也不改官方任何文件。
一句话
| 防线 | 拦什么 | 在哪 |
|---|---|---|
| 动态图形验证码 | 挡脚本批量提交:波浪扭曲字符图,点图可换一张 | 前台登录页 / 注册页 |
| 蜜罐 + 速度检测 | 挡不看页面直 POST 的机器人:隐藏输入框 + 提交过快判负 | 前台登录页 / 注册页 |
| 失败次数锁定 | 挡密码爆破:同 IP+账号连续错 N 次锁 M 分钟 | 前台登录 / 注册 + 后台登录 |
| 老客户免验证 | 不给回头客添堵:同一浏览器登录满 3 次,登录页不再出验证码 | 自动,无需配置 |
| 注册邮箱验证码 | 挡一次性邮箱乱注册:邮箱收 6 位码才能提交 | 注册页邮箱框后 |
一、怎么用(装完即生效)
- 后台安装启用插件 → 一切默认开着,前台立刻就有验证码和蜜罐。
- 想调的都在 后台 → 应用 → 登录安全 → 设置:验证码开关(登录页/注册页独立)、题型(默认抄 4 位字符,可切算术题)、老客户免验证、邮箱验证码、锁定次数与时长。
- 邮箱验证码要在「系统设置 → 邮件设置」里先配好发信引擎(SMTP 等);没配好时注册页自动跳过邮箱验证,不会把客户卡死。
二、配置页每个开关是干什么的
| 开关 | 默认 | 作用 | 什么时候改 |
|---|---|---|---|
| 登录页验证码 | 开 | 前台登录页显示图形验证码 | 想彻底关掉时 |
| 注册页验证码 | 开 | 前台注册页显示图形验证码 | 同上 |
| 算术题模式 | 关 | 验证码从「抄 4 位字符」换成两位数加减算式 | 客户群心算无压力、想换口味时 |
| 老客户免验证 | 开 | 同一浏览器累计登录满 N 次,登录页免验证码;关掉=所有人都显示(调试用) | 调试外观时关 |
| 成为老客户所需登录次数 | 3 | 达到该次数免验证;登录失败一次即清零重新累计 | 想让客户登录 1 次就免验证 → 改 1 |
| 免验证有效期(天) | 180 | 超过该天数没登录成功,资格作废重新累计;设备 cookie 寿命自动跟随此值 | 想更严格 → 改小 |
| 注册页邮箱验证码 | 开 | 注册需先收 6 位邮箱验证码(60 秒重发倒计时) | 不想启用时关 |
| 验证码有效分钟 | 10 | 邮箱验证码有效期(3–60 分钟),一码一用、错 5 次作废 | 一般不用动 |
| 蜜罐 + 速度检测 | 开 | 隐藏输入框 + 提交快于 1.2 秒判机器人 | 一般不用动 |
| 失败锁定次数 / 分钟 | 5 / 15 | 同 IP+账号连续失败 N 次锁 M 分钟 | 爆破猖獗时调严 |
三、老客户免验证的机制(它凭什么认定「不是机器人」)
- 每次前台登录成功,给浏览器发一枚隐形设备 cookie(HttpOnly,寿命跟随免验证有效期),服务器只记 cookie 哈希 + 累计成功次数;
- 累计满设置次数(默认 3)→ 这台设备登录页不再出验证码;注册页永远出——陌生设备没有信任基础;
- 该设备登录失败一次,信任立即清零重新累计:偷到 cookie 仍需正确密码,错一次就打回验证码;
- 蜜罐、速度检测、失败锁定对老客户照常生效,免掉的只有验证码这一关;
- 信任记录存站点文件(不进数据库、不进缓存),卸载插件删除即零残留。
四、实现边界(为什么它不碍事)
- 不改官方任何文件:验证码行经官方钩子注入,校验走插件自己的中间件;停用/卸载即完全回到安装前。
- 邮箱验证码同步直发、不走队列——官方队列默认没有 worker,走队列永远收不到信。
- 发信参数直接用系统「邮件设置」,插件里不重复配置。
- 验证码图 GD 本地绘制:有 TTF 字体时字符旋转、错位、整图波浪扭曲;没有字体也能用内置点阵字兜底,不挑服务器环境。
- 支持 20 语种(ar de en es fr id it ja km ko ms nl pt-br pt-pt ru th tr vi zh-cn zh-hk),界面文案全跟随店铺语言。
功能清单
- 前台登录页 / 注册页动态图形验证码(GD 绘制、点图刷新、题型可切字符/算术)
- 蜜罐字段 + 提交速度检测(机器人直 POST 判负)
- 失败次数锁定(前台登录/注册 + 后台登录共用计数,可配次数与时长)
- 老客户免验证(设备信任:累计登录、失败清零、有效期可配、可整体关闭调试)
- 注册页邮箱验证码(6 位码、60 秒重发间隔、同邮箱/同 IP 限额、一码一用、邮件通道未配置自动跳过)
- 后台配置页全项可调,20 语种
兼容环境
- InnoShop CE 0.9.x,PHP 8.1 及以上(需 GD 扩展,默认都有)
- 邮箱验证码依赖「系统设置 → 邮件设置」里已配好的发信引擎;未配置时该功能自动停用,不影响其他防线
- 只读官方数据表(customers 等),不修改官方任何文件;停用插件即完全回到安装前
- 与其他自有插件零互相依赖
反馈与支持
遇到问题请发邮件至 jl@ecmai.cn(仅作者可见,不会公开显示)。
为便于快速定位,邮件里请附上:插件名称与版本号、InnoShop 版本、PHP 版本、问题现象与截图。