shtrihstr/wp-recaptcha

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

安装: 11

依赖: 0

建议: 0

安全: 0

星标: 1

关注者: 12

分支: 1

类型: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;
     } );