最近一段时间评论区和后台登录不太安生。垃圾评论一波接一波,留言本也跟着遭殃,登录页还有脚本在砸。
Typecho后台那套验证看着有,真正拦恶意评论和撞库基本等于没拦。
作为被刷怕了的人,咱能忍?当场按hCaptcha手搓了这个验证插件。
像我这种个人博客的体量,hCaptcha的免费功能和配额完全够用,没必要上那些又贵又重的方案。
插件也做了几处比较实用的小设计:登录在核对密码之前就拦,密钥填错还能用 DISABLE 文件把后台救回来。
实际效果你可以在我博客上就能体验到效果。
插件的具体介绍和使用方法如下:
TpHcaptcha - Typecho hCaptcha 人机验证插件
功能
为 Typecho 博客接入 hCaptcha 人机验证,在评论 / 留言、后台登录、用户注册时拦截机器人和垃圾请求。访客先完成验证,服务端再向 hCaptcha 核对结果,通过后才允许提交。
特点
- 支持评论 / 留言、后台登录、用户注册,可分别开关
- 登录验证发生在核对密码之前,机器人过不了就不会进后续流程
- 评论表单自动注入,一般不用改主题模板
- 已登录用户、管理员评论可跳过验证(默认开启)
- 密钥填错过还能用
DISABLE文件临时关闭校验,避免锁死后台 - 轻量实现,不向数据库写入额外统计数据
- 兼容 TpCache、TpRedis 等页面缓存插件
注意事项
- 插件目录名必须是
TpHcaptcha,下载后不用改名 - 需要 Typecho 1.3 及以上、PHP 7.4 及以上
- 服务器要能访问
api.hcaptcha.com(需 cURL,或开启allow_url_fopen) - 勾选评论验证后,trackback、pingback 会被拒绝
- 开启登录验证后,密钥填错或域名未加入 hCaptcha 站点,将无法进入后台
- 如遇问题请在 www.fungj.com 或 GitHub Issues 反馈
使用说明
安装方法
- 下载插件,确保文件夹名为
TpHcaptcha - 将插件目录上传到 Typecho 的
usr/plugins/目录下,目录内需有Plugin.php - 后台 → 插件 → 启用 TpHcaptcha
- 打开 hCaptcha Dashboard 注册并创建站点,取得 Site Key、Secret Key
- 进入插件设置,填写密钥,勾选需要验证的位置,保存
后台设置
插件提供了这些配置选项:
- Site Key / Secret Key:在 hCaptcha 后台创建站点后获得。Secret Key 只存在服务器上,保存过后该栏可留空,不会被清空
- 启用位置:评论 / 留言、后台登录、用户注册,可分别勾选。留言本如果是开启了评论的独立页面,勾「评论 / 留言」即可
- 已登录用户 / 管理员跳过评论验证:默认开启,自己回帖不用每次点验证框
- 组件主题、尺寸、语言:评论区建议用常规尺寸;登录页较窄,会自动改成紧凑
- 评论在验证服务不可用时:可选拒绝或放行。登录和注册始终拒绝,避免后台被撞开
- 访客 IP:直连、Cloudflare、反代三种,经过 CDN 时请选对应项
- 校验超时:向 hCaptcha 发请求的超时时间,建议 3~8 秒
- 前端脚本 / 服务端校验地址:留空使用官方地址。国内访问异常时可填写 https 镜像
主题适配
一般不用改模板。插件会查找带 textarea[name="text"] 的评论表单,把验证框插到提交按钮前面。
如果没有出现验证码,在评论提交按钮前加入:
<?php if (class_exists('TypechoPlugin\\TpHcaptcha\\Plugin')) { \TypechoPlugin\TpHcaptcha\Plugin::output(); } ?>使用 PJAX 的主题会在页面切换后重新渲染。若主题用 Ajax 提交评论,需要把字段 h-captcha-response 一并提交。
和缓存插件一起用
评论提交走 /action/comment,登录走 /action/login,这些请求本身不会进页面缓存。服务端校验不受 TpCache、TpRedis 一类插件影响。
如果开了整页缓存,页面 HTML 会连验证码脚本一起被存下来。注意:
- 启用或改过本插件设置后,到缓存插件里清一次页面缓存,否则访客可能还是旧页面
- 缓存插件一般会对已登录用户失效(TpCache / TpRedis 默认如此)。不要关掉这一项,否则管理员看到的无验证码页面可能被拿去给访客用
- 本插件只在可评论的文章 / 页面插入脚本,首页、分类页不会多出一段 JS
和其它评论、通知类插件可以同时开。验证会先于它们执行,机器人过不了就不会再进后续处理。
无法登录后台
开启登录验证后,如果密钥填错、域名未加入 hCaptcha 站点,或服务器访问不了校验接口,将无法进入后台。可任选下面一种方式处理:
- 在插件目录新建空文件
DISABLE,校验会全部跳过。登录后改好设置,再删除该文件 - 用 FTP 把插件目录临时改名为
TpHcaptcha.bak,登录后再改回来 - 备份数据库后,删除
typecho_options表中name = 'plugin:TpHcaptcha'的记录
测试密钥
仅供本地调试,始终通过,没有防护作用。正式环境请换成自己的密钥。
Site Key:10000000-ffff-ffff-ffff-000000000001
Secret Key:0x0000000000000000000000000000000000000000hCaptcha 不支持 localhost,本机调试请在 hosts 中把测试域名指向 127.0.0.1。
环境要求
- Typecho 1.3 及以上
- PHP 7.4 及以上
- 服务器能访问
api.hcaptcha.com
版本历史
v1.1.0: 首次公开发布
- 支持评论 / 留言、后台登录、用户注册的 hCaptcha 校验
- 登录在核对密码之前拦截
- 评论表单自动注入,登录与注册页自动插入组件
- 提供 DISABLE 救援开关
- 兼容 TpCache、TpRedis 等页面缓存
升级说明
从旧版本升级请先禁用插件再升级,避免出现不必要的问题。启用后如果设置页样式没变化,禁用再启用一次即可。
1 条评论
验证测试插件