最近一段时间评论区和后台登录不太安生。垃圾评论一波接一波,留言本也跟着遭殃,登录页还有脚本在砸。

Typecho后台那套验证看着有,真正拦恶意评论和撞库基本等于没拦。

作为被刷怕了的人,咱能忍?当场按hCaptcha手搓了这个验证插件。

像我这种个人博客的体量,hCaptcha的免费功能和配额完全够用,没必要上那些又贵又重的方案。

插件也做了几处比较实用的小设计:登录在核对密码之前就拦,密钥填错还能用 DISABLE 文件把后台救回来。

实际效果你可以在我博客上就能体验到效果。

插件的具体介绍和使用方法如下:

TpHcaptcha - Typecho hCaptcha 人机验证插件

功能

为 Typecho 博客接入 hCaptcha 人机验证,在评论 / 留言、后台登录、用户注册时拦截机器人和垃圾请求。访客先完成验证,服务端再向 hCaptcha 核对结果,通过后才允许提交。

特点

  1. 支持评论 / 留言、后台登录、用户注册,可分别开关
  2. 登录验证发生在核对密码之前,机器人过不了就不会进后续流程
  3. 评论表单自动注入,一般不用改主题模板
  4. 已登录用户、管理员评论可跳过验证(默认开启)
  5. 密钥填错过还能用 DISABLE 文件临时关闭校验,避免锁死后台
  6. 轻量实现,不向数据库写入额外统计数据
  7. 兼容 TpCache、TpRedis 等页面缓存插件

注意事项

  1. 插件目录名必须是 TpHcaptcha,下载后不用改名
  2. 需要 Typecho 1.3 及以上、PHP 7.4 及以上
  3. 服务器要能访问 api.hcaptcha.com(需 cURL,或开启 allow_url_fopen)
  4. 勾选评论验证后,trackback、pingback 会被拒绝
  5. 开启登录验证后,密钥填错或域名未加入 hCaptcha 站点,将无法进入后台
  6. 如遇问题请在 www.fungj.com 或 GitHub Issues 反馈

使用说明

安装方法

  1. 下载插件,确保文件夹名为 TpHcaptcha
  2. 将插件目录上传到 Typecho 的 usr/plugins/ 目录下,目录内需有 Plugin.php
  3. 后台 → 插件 → 启用 TpHcaptcha
  4. 打开 hCaptcha Dashboard 注册并创建站点,取得 Site Key、Secret Key
  5. 进入插件设置,填写密钥,勾选需要验证的位置,保存

后台设置

插件提供了这些配置选项:

  1. Site Key / Secret Key:在 hCaptcha 后台创建站点后获得。Secret Key 只存在服务器上,保存过后该栏可留空,不会被清空
  2. 启用位置:评论 / 留言、后台登录、用户注册,可分别勾选。留言本如果是开启了评论的独立页面,勾「评论 / 留言」即可
  3. 已登录用户 / 管理员跳过评论验证:默认开启,自己回帖不用每次点验证框
  4. 组件主题、尺寸、语言:评论区建议用常规尺寸;登录页较窄,会自动改成紧凑
  5. 评论在验证服务不可用时:可选拒绝或放行。登录和注册始终拒绝,避免后台被撞开
  6. 访客 IP:直连、Cloudflare、反代三种,经过 CDN 时请选对应项
  7. 校验超时:向 hCaptcha 发请求的超时时间,建议 3~8 秒
  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 会连验证码脚本一起被存下来。注意:

  1. 启用或改过本插件设置后,到缓存插件里清一次页面缓存,否则访客可能还是旧页面
  2. 缓存插件一般会对已登录用户失效(TpCache / TpRedis 默认如此)。不要关掉这一项,否则管理员看到的无验证码页面可能被拿去给访客用
  3. 本插件只在可评论的文章 / 页面插入脚本,首页、分类页不会多出一段 JS

和其它评论、通知类插件可以同时开。验证会先于它们执行,机器人过不了就不会再进后续处理。

无法登录后台

开启登录验证后,如果密钥填错、域名未加入 hCaptcha 站点,或服务器访问不了校验接口,将无法进入后台。可任选下面一种方式处理:

  1. 在插件目录新建空文件 DISABLE,校验会全部跳过。登录后改好设置,再删除该文件
  2. 用 FTP 把插件目录临时改名为 TpHcaptcha.bak,登录后再改回来
  3. 备份数据库后,删除 typecho_options 表中 name = 'plugin:TpHcaptcha' 的记录

测试密钥

仅供本地调试,始终通过,没有防护作用。正式环境请换成自己的密钥。

Site Key:10000000-ffff-ffff-ffff-000000000001
Secret Key:0x0000000000000000000000000000000000000000

hCaptcha 不支持 localhost,本机调试请在 hosts 中把测试域名指向 127.0.0.1。

环境要求

  • Typecho 1.3 及以上
  • PHP 7.4 及以上
  • 服务器能访问 api.hcaptcha.com

版本历史

  • v1.1.0: 首次公开发布

    • 支持评论 / 留言、后台登录、用户注册的 hCaptcha 校验
    • 登录在核对密码之前拦截
    • 评论表单自动注入,登录与注册页自动插入组件
    • 提供 DISABLE 救援开关
    • 兼容 TpCache、TpRedis 等页面缓存

升级说明

从旧版本升级请先禁用插件再升级,避免出现不必要的问题。启用后如果设置页样式没变化,禁用再启用一次即可。

插件下载地址:

https://github.com/FungCoder/TpHcaptcha

最后修改:2026 年 09 月 04 日
如果觉得我的文章对你有用,请随意赞赏