wp-digital/wp-recaptcha

帮助使用 Google reCAPTCHA v3 或 Cloudflare Turnstile 保护网站。

安装次数: 1,500

依赖关系: 2

建议者: 0

安全性: 0

星级: 1

关注者: 12

分支: 1

开放问题: 0

类型:wordpress-muplugin

3.0.5 2023-08-29 12:28 UTC

README

描述

帮助使用 Google reCAPTCHA v3Cloudflare Turnstile 保护网站。此插件默认提供登录和找回密码表单的保护,但可以通过遵循此文档将其添加到任何表单。

要求

  • PHP 7.4+
  • WordPress 6.2+(您可以尝试使用旧版本,但未经测试)

功能

  • 默认保护登录和找回密码表单。
  • 支持 Google reCAPTCHA v3 和 Cloudflare Turnstile。
  • 允许 IP 地址绕过验证。
  • 向用户发送验证电子邮件。
  • 允许自定义验证电子邮件的主题、消息正文和链接。
  • 允许自定义验证码长度。
  • 允许为自定义表单添加保护。

屏幕截图

Google reCAPTCHA v3

Cloudflare Turnstile

Verification

Allowed IPs

安装

  • 首选方法是用 Composer

    composer require wp-digital/wp-recaptcha
    

    默认情况下,它将被安装为 必用插件。但可以通过 composer.json 中的 extra.installer-paths 控制它。

  • 另一种方法是克隆此存储库到 wp-content/mu-plugins/wp-content/plugins/

    cd wp-content/plugins/
    git clone git@github.com:wp-digital/wp-recaptcha.git
    cd wp-recaptcha/
    composer install
    

如果插件作为常规插件安装,则从插件页面或 WP-CLI 激活 Bot Protectionwp plugin activate wp-recaptcha

使用方法

添加所需的常量(通常添加到 wp-config.php

define( 'WPD_RECAPTCHA_KEY', '' );
define( 'WPD_RECAPTCHA_SECRET', '' );

或只需

define( 'RECAPTCHA_KEY', '' );
define( 'RECAPTCHA_SECRET', '' );

根据常量,插件将使用 Google reCAPTCHA v3 或 Cloudflare Turnstile。如果两个常量都为空,则插件将被禁用。

Cloudflare Turnstile 的检测基于 WPD_RECAPTCHA_KEYRECAPTCHA_KEY 常量,使用正则表达式:^\dx

允许 IP 地址绕过验证

有两种方法可以允许 IP 地址绕过验证

  1. 将 IP 地址添加到 WPD_RECAPTCHA_ALLOWED_IPS 常量

    define( 'WPD_RECAPTCHA_ALLOWED_IPS', '' ); // comma separated list of IP addresses
    
  2. 在管理员区域添加 IP: 设置 -> Bot Protection -> 允许的 IP,每行一个 IP(见 屏幕截图)。

自定义

验证

更改验证电子邮件的主题

/**
 * @param string  $subject
 * @param string  $code
 * @param WP_User $user
 *
 * @return string
 */
add_filter( 'wpd_recaptcha_verification_email_subject', function ( string $subject, string $code, WP_User $user ): string {
	return 'New subject';
}, 10, 3 );

更改验证电子邮件的消息正文

/**
 * @param string  $message
 * @param string  $code
 * @param WP_User $user
 *
 * @return string
 */
add_filter( 'wpd_recaptcha_verification_email_message', function ( string $message, string $code, WP_User $user ): string {
	return 'New message';
}, 10, 3 );

修改验证链接

/**
 * @param string  $link
 * @param string  $code
 * @param WP_User $user
 *
 * @return string
 */
add_filter( 'wpd_recaptcha_verification_link', function ( string $link, string $code, WP_User $user ): string {
	return 'https://example.com/verify/' . $code;
}, 10, 3 );

更改验证码长度

/**
 * @param int $length
 *
 * @return int
 */
add_filter( 'wpd_recaptcha_verification_code_length', function ( int $length ): int {
	return 10;
} );

钩子

动作

  • wpd_recaptcha_loaded - 在插件加载时触发。接受一个参数:WPD\Recaptcha\Plugin 实例。
  • wpd_recaptcha_verify - 在需要验证时触发。接受一个参数:WP_User 实例。
  • wpd_recaptcha_form_success - 在 reCAPTCHA 或 Turnstile 验证成功时触发。接受两个参数:WPD\Forms\FormInterface 实例和 WPD\Recaptcha\Response 实例。

文档

为自定义表单添加保护

  • 创建实现表单接口 WPD\Forms\FormInterface 的类

     <?php
    
     use WPD\Forms\FormInterface;
    
     class CustomForm implements FormInterface {
     	// @TODO: implement methods
     }
    
  • 将表单添加到 wpd_recaptcha_forms 过滤器

     /**
      * @param array $forms
      *
      * @return array
      */
     add_filter( 'wpd_recaptcha_forms', function ( array $forms ): array {
     	$forms[] = new CustomForm();
    
     	return $forms;
     } );