msurguy/honeypot

蜜罐式垃圾邮件防护

1.3.0 2024-05-03 21:55 UTC

This package is auto-updated.

Last update: 2024-09-14 17:21:23 UTC


README

它是如何工作的?

“蜜罐”式垃圾邮件防护方法是一种简单而有效的手段,可以延迟一些来到您网站的垃圾邮件机器人。这种技术基于创建一个应由应用程序的真实用户留空的输入字段,但垃圾邮件机器人很可能将其填写。

此包创建一个包含两个字段的隐藏DIV,蜜罐字段(如“my_name”)和蜂蜜时间字段——一个标记页面何时被发送给用户的加密时间戳。当包含这些对用户不可见的输入表单提交到您的应用程序时,与包一起提供的自定义验证器将检查蜜罐字段是否为空,并检查用户填写表单所需的时间。如果表单填写得太快(即少于5秒)或在蜜罐字段中输入了值,则此提交很可能是来自垃圾邮件机器人。

安装

在您的终端输入:composer require msurguy/honeypot。或者打开 composer.json 并在 "require" 下添加以下行

{
    "require": {
        "msurguy/honeypot": "^1.0"
    }
}

接下来,将此行添加到 app/config/app.php 文件中 'providers' 部分的下面

'Msurguy\Honeypot\HoneypotServiceProvider',

添加蜜罐外观

'Honeypot' => 'Msurguy\Honeypot\HoneypotFacade'

到这一步,包已安装,您可以使用以下方式使用它。

用法

通过插入 Honeypot::generate(..) 将蜜罐捕获器添加到您的表单中,如下所示

Laravel 5 及以上版本

{!! Form::open('contact') !!}
    ...
    {!! Honeypot::generate('my_name', 'my_time') !!}
    ...
{!! Form::close() !!}

其他 Laravel 版本

{{ Form::open('contact') }}
    ...
    {{ Honeypot::generate('my_name', 'my_time') }}
    ...
{{ Form::close() }}

generate 方法将输出以下 HTML 标记(my_time 字段将包含加密时间戳)

<div id="my_name_wrap" style="display:none;">
    <input name="my_name" type="text" value="" id="my_name">
    <input name="my_time" type="text" value="eyJpdiI6IkxoeWhKc3prN2puZllEajRwZ3lrc0I5bU42bUFWbzF1NEVVOEhxbG9WcFE9IiwidmFsdWUiOiJxNEtBT0NpYW5lUjJvWXp6VE45a1U0V3dNbk9Jd2RUNW42NFpiQWtTRllRPSIsIm1hYyI6IjAyMWQ0NWI1NTVkYTBjZTAxMTdhZmJmNTY0ZDI4Nzg4NzU3ODU4MjM1Y2MxNTVkYjAwNmFhNzBmNTdlNmJmMjkifQ==">
</div>

在将蜜罐字段添加到标记中并指定宏后,添加表单的蜜罐和蜂蜜时间字段的验证

$rules = array(
    'email'     => "required|email",
    ...
    'my_name'   => 'honeypot',
    'my_time'   => 'required|honeytime:5'
);

$validator = Validator::make(Input::get(), $rules);

请注意,“honeytime”需要一个参数,指定用户填写表单所需的时间(秒数)。如果时间少于这个值,则该表单被视为垃圾邮件提交。

这就完成了!享受邮箱中垃圾邮件变少吧。如果您需要更强的垃圾邮件防护,请考虑使用 AkismetreCaptcha

测试

如果您想使用此包测试表单的提交,可能需要禁用蜜罐以使验证通过。为此,只需在测试中调用 disable() 方法即可。

Honeypot::disable();

$this->visit('contact')
    ->type('User', 'name')
    ->type('user@email.com', 'email')
    ->type('Hello World', 'message')
    ->press('submit')
    ->see('Your message has been sent!');

致谢

基于 Ian Landsman 最初创建的工作:https://github.com/ianlandsman/Honeypot

许可证

此作品由 Maksim Surguy 以 MIT 许可。