如何在 WordPress 设定 Google reCAPTCHA 保护(登入、留言、联络)表单,免遭恶意攻击

在 WordPress 网站运行一段时间後,发现有恶意程序,一直在文章留言区发布广告贴文,一直手动删留言也不是辨法。本文将会教你如何设定 Google reCAPTCHA 来阻挡机器人程序恶意留言。

在我的 WordPress 网站上线大概 2 个多月的时候,就发现有零星的广告留言,那时候是手动一笔一笔删,但现在觉得广告留言变的愈来愈多,一天就有 10 几笔广告留言,一直手动删留言也不是办法,差不多该安装一下 Google 推出的 Google reCAPTCHA 来阻挡机器人持续攻击我的网站。

在 WordPress 所看到的留言大多是广告的反向连结,其中少部份留言可能会有木马或病毒程序,如果大家看到留言中的连结,千万不要去点喔。

在 WordPress 刚安装好的时候,预设就有一个阻挡恶意留言的外挂,叫做「Akismet Anti-Spam」,这是 WordPress 官方推荐的外挂。
可以做到阻挡恶意留言的功能,可是只要网站有商业行为,包含放置 Google Adsense 广告,或是提供商业服务的网站,就无法免费使用,若要付费的话每月费用为 US$10。

如果你的文章不需要留言功能的话,也可以在设定中关闭留言功能,也是一种避免攻击的方法。
如果想要维持留言功能,那就无法避免被机器人留言,所以要安装保护机制。

对於阻挡机器人留言的功能,我推荐使用 Google reCAPTCHA 就可以了,不只可以用在文章留言区,还可以设定在後台的登入页面 “wp-login.php”。
如果你有使用 Contact Form 7 做客户联络表单的话,也是可以使用 Google reCAPTCHA。

以下我将会介绍什麽是 Google reCAPTCHA 以及如何在登入、文章留言及联络表单中都加入 Google reCAPTCHA 验证机制。

什麽是 Google reCAPTCHA

Google reCAPTCHA 主要是验证当网页中有表单输入时,判断使用者行为是人在操作还是机器人在操作。

如果当你输入表单後送出时,看到勾选「I’m not a rebot (我不是机器人)」的画面,就是 Google reCAPTCHA 在检查你的行为是否是机器人。

现在常用的 Google reCAPTCHA 有分为 v2 及 v3 两个版本,而 v1 已经被停用了。

Google reCAPTCHA v2 核取方块验证

Google reCAPTCHA v2 发布於 2012 年,使用图形方块来验证,因为目前程序无法判断图片中的正确性,只有人类可以正常判断出来。

Google reCAPTCHA v2 因为每次都会中断使用者行为来选取方块验证,也造成了使用者麻烦,Google 进一步改版增加了隐形模式。

隐形模式的验证机制如同 Google reCAPTCHA v3 一样,透过机器学习来观察使用者行为,如果判定为人类操作,则会允许送出表单,反之,就会出现核取方块确认是否为人类操作。

Google reCAPTCHA v3 机器学习给分验证

Google reCAPTCHA v3 发布於 2018 年,采用机器学习观察人类的操作行为给予操作分数。

Google reCAPTCHA v3 会多面性的检查你的行为,包含滑鼠移动、页面切换、等待时间、反应时间、过去操作记录等等,来为你的行为打一个分数。
如果分数越高,表示人为操作,会让你正常送出表单,画面上不会有任何的中断行为。分数太低则会判定为机器人,无法送出表单。

如果要申请 Google reCAPTCHA 服务就直接选 v3 版本就行。

申请 Google reCAPTCHA

Google reCAPTCHA 申请页面: https://www.google.com/recaptcha/about/

点选上面「v3 Admin Console」。

注册新网站

这边是加入你 WordPress 的网域。

「标签」可以输入网站名称或是网址,让你知道要设定那一个网站。
「reCAPTCHA 类型」请选择 reCAPTCHA v3 (以分数验证要求)。
「网域」就输入你网站的网域 (不需要输入 https )。

完成後在下面勾选「接受《reCAPTCHA 服务条款》」,再按「提交」。

取得网站金钥与密钥

接下来出现的「网站金钥」与「密钥」等等在 WordPress 会用到,这里先保留画面,我们另开画面到 WordPress 後台。

安装 Invisible reCaptcha for WordPress 外挂

Invisible reCaptcha for WordPress 是将 Google reCAPTCHA 导入 WordPress 的外挂。

在 WordPress 「安装外挂」的地方输入「Invisible reCaptcha for WordPress」搜寻外挂,安装并启用此外挂。

安装之後在「设定 > Invisible reCaptcha」点选单会进入设定页面。

填入网站金钥与密钥

第 1 个要设定的动作就是把刚刚在 Google reCAPTCHA 取得的「网站金钥」与「密钥」填进去。
在「Setting」画面中,在「Your Site Key」填入「网站金钥」。
在「Your Secret Key」填入「密钥」。

输入後,先在下方的「储存设定」存档一下。

中文化设定:

如果要切换成繁体中文的话,在「Language」选「Chinese (Traditional)」还不会成功,要到「控制台 > 更新」,里面去更新语言套件再回来选「Chinese (Traditional)」才会是繁体中文。

启用文章留言表单验证

在 Invisible reCaptcha 的选单里面选「WordPress」,勾选「启用留言表单保护」。

储存後就可以了。

回到前台的文章留言处,看一下。
会发现在网页的右下角多了一个 Google reCAPTCHA 图示,有看到这个图片,就表示 Google reCAPTCHA 的机器学习验证已经开始了。

当使用者输入留言後,要送出时,就会启动验证。

启用登入验证

如果要启用登入验证,一样在刚刚「WordPress」设定画面,勾选「启用登入表单保护」。
这画面上同时还有「启用注册表单保护」及「启用忘记密码表单保护」选单,你如果需要也可以一起勾选。

在储存之後,回到登入画面,只要看到右下角的 Google reCAPTCHA 图示,就表示验证已经开始了。

防止登入攻击新选择

虽然 Invisible reCaptcha for WordPress 外挂提供了登入验证 reCAPTCHA,可是我建议大家使用更好的方式来阻挡恶意攻击。

安装 WPS Hide Login 外挂,更换登入页网址。
详细的说明请参考另一篇文章: WordPress WPS Hide Login 外挂教学,隐藏登入网址,防止暴力登入攻击

会使用 WPS Hide Login 的原因是,如果没有将预设的登入网址换掉,後台还是会一直被机器人尝试登入,虽然不会成功,但骇客通常是用暴力破解法攻击,时间久是会被登入成功的。

在骇客尝试登入网站时,服务器无形中在浪费效能回应这些恶意攻击,会造成服务器的速度变慢。

只要更换网址,骇客就不知道入口在那,也就无法直接攻击了,这方式也需要定期更换网址才行。

启用联络表单 (Contact Form 7) 验证

如果你有安装联络表单 (Contact Form 7) 的话,也可以在 Contact Form 7 里面设定送出表单时,验证 Google reCAPTCHA。

在选单「Contact > Integration」开启画面。

在方块中找「reCAPTCHA」,执行「Setup Integration」。

输入在Google reCAPTCHA 取得的「网站金钥」与「密钥」。
在「Site Key」输入「网站金钥」。
在「Secret Key」填入「密钥」。

输入後储存设定,之後再使用联络表单 (Contact Form 7) 送出时,就会进行机器人检查了。
当回到前台的联络表单,只要看到有出现 Google reCAPTCHA 图示就是成功了。

重点整理

  1. 留言被攻击是无法避免的,所以要设定机器人验证机制
  2. 使用 Google reCAPTCHA 免费验证服务
  3. 在 Google reCAPTCHA 注册网址
  4. 在 Invisible reCaptcha for WordPress 填入「网站金钥」与「密钥」开启留言表单保护
  5. 可开启登入保护或安装 WPS Hide Login 更换登入网址
  6. 联络表单 (Contact Form 7) 也可以使用 Google reCAPTCHA

相关学习文章
WordPress 如何关闭 XML-RPC 服务,避免资安攻击风险
WordPress WPS Hide Login 外挂教学,隐藏登入网址,防止暴力登入攻击


<<:  冒险村12 - rescue exception

>>:  Day27 ( 游戏设计 ) 老鼠走迷宫

[Day3] 作用域

作用域是原始码中定义变数的区域,他规范了目前程序码应该要去哪里查找变数,而作用域又可分为 静态作用域...

day7_MacOs ARM 的游戏之旅

MacOs ARM 版本的游戏之旅 Mac 玩游戏?而且还是在 ARM 架构?是的你没听错,你可以透...

DynamoDB汇出至S3

NoSQL资料除了前次的备份还原之外, 也可以汇出至S3当作额外备份, 或是给其他AWS服务使用. ...

DAY29: 最後倒数

已经迈向第29天了,但我还在熟悉Nodejs的表面的感觉, 想在这倒数第二天做出有点技术的东西, 可...

Day 1-开始上路罗~!

前言 主要籍由这个主题,熟悉永丰金融API的相关操作。 将系列文章 做一下规划 环境建置 API串接...