大雪山/no-captcha

1.0.1 2021-04-23 05:09 UTC

This package is auto-updated.

Last update: 2024-09-16 19:10:51 UTC


README

No Captcha Form Spam Filter是一个用于处理垃圾邮件机器人的PHP实用库,它采用不引人注目且用户友好的技术。

应用这些技术可以帮助您在网站中减少90%以上的垃圾邮件,并且用户不会因为侵入式的验证码或额外的字段而感到烦恼。

安装

您可以下载它并将其放置在第三方库文件夹中,但我们强烈建议您通过composer进行安装。

运行以下命令:

$ composer require daxslab/no-captcha

或添加以下内容到您的composer.json文件的require部分:

"daxslab/no-captcha": "~1.0"

NoCaptchaAntiSpam 类

NoCaptchaAntiSpam类可用于声明保护规则、在表单中包含安全代码以及检查表单提交是否触发了任何规则验证。

要创建NoCaptchaAntiSpam类的实例,可以使用create()静态函数

use daxslab\nocaptcha\NoCaptchaAntiSpam;
use daxslab\nocaptcha\rules\CssHiddenFieldRule;

// Declare no captcha anti spam object with CSS based hidden field check
$noCaptchaAntiSpam = NoCaptchaAntiSpam::create([
        'rules' => [
            CssHiddenFieldRule::create([
                // form input field name
                'name' => 'css_hidden_field',
            ])
        ],
]);

包含表单元素

使用已创建的NoCaptchaAntiSpam实例,您可以使用renderRules()函数在表单中包含所需的元素

<form id="contactForm" method="post">
    <div class="form-group">
        <label for="contactName">Name</label>
        <input class="form-control" name="contact_name" id="contactName" placeholder="Enter name">
    </div>
    
    <!--  Include rules form elements  -->
    <?= $noCaptchaAntiSpam->renderRules() ?>
    
    <button type="submit" name="submit_button" class="btn btn-primary">Submit</button>
</form>    

验证表单提交

使用从NoCaptchaAntiSpam创建的实例中的checkSubmit()函数,您可以检查在表单提交时是否触发了任何声明的规则

if ($_POST){
    if ($noCaptchaAntiSpam->checkSubmit()){
        echo 'Form submitted correctly';
    } else {
        echo 'Bot detected';
    }
}

规则

规则类实现了不同的安全检查,包括

  • CssHiddenFieldRule:使用CSS隐藏的诱饵字段
  • JavascriptGeneratedHiddenFieldRule:使用JavaScript生成的诱饵字段
  • JavascriptFilledInputRule:使用JavaScript填充的隐藏输入
  • SessionTimeTrapRule:使用会话存储变量的时间陷阱
  • FormTimeTrapRule:使用表单字段的时陷阱
  • CookieCheckRule:cookie验证

NoCaptchaAntiSpam实例可以包含一个或多个规则。

随机字段名称

随机字段名称可以应用于额外的安全层,它们存储在PHP会话中,规则字段名称将改变,使得机器人难以识别。随机字段名称可以应用于单个规则或多个规则。

文档

有关扩展文档和示例,您可以将doc文件夹放置在PHP支持的网络服务器后面。