msurguy / honeypot
蜜罐式垃圾邮件防护
Requires
- php: >=5.3.0
- illuminate/config: 4.*|5.*|6.*|7.*|8.*|9.*|^10.0|^11.0
- illuminate/support: 4.*|5.*|6.*|7.*|8.*|9.*|^10.0|^11.0
- illuminate/translation: 4.*|5.*|6.*|7.*|8.*|9.*|^10.0|^11.0
Requires (Dev)
- mockery/mockery: 0.9.*|^1.4.4
- phpunit/phpunit: 4.0.*|^9.5.10|^10.5
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”需要一个参数,指定用户填写表单所需的时间(秒数)。如果时间少于这个值,则该表单被视为垃圾邮件提交。
这就完成了!享受邮箱中垃圾邮件变少吧。如果您需要更强的垃圾邮件防护,请考虑使用 Akismet 或 reCaptcha
测试
如果您想使用此包测试表单的提交,可能需要禁用蜜罐以使验证通过。为此,只需在测试中调用 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 许可。