kim / defender
使用随机输入名称/诱饵来抵御垃圾邮件机器人。
Requires
- php: >=5.4.0
- illuminate/session: ~5.0
- illuminate/support: ~5.0
- illuminate/validation: ~5.0
- illuminate/view: ~5.0
Requires (Dev)
- mockery/mockery: dev-master
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2024-09-28 18:47:57 UTC
README
此包通过使用随机输入名称和诱饵帮助您抵御垃圾邮件机器人。
简介
垃圾邮件是互联网的一个大问题。表单填写机器人会读取展示给它们的表单,并自动填写字段。另一种类型的机器人会记录POST数据并将其重新发送到提交URL。此包通过最小努力帮助抵御这些机器人。
该包随机化输入名称,使机器人无法做出有根据的猜测。示例
Before: <input type="text" name="username">
After: <input type="text" name="neeS9dJDeQCbNvN3lgyxIkdQ6R1l2GHEEnmt">
除此之外,此包允许您添加随机数量的隐藏输入,即“诱饵”(或诱饵)。您的普通用户永远不会看到这些,但机器人会。机器人倾向于填写所有输入,因此您可以轻松拒绝包含“诱饵”输入的字段。
通过这样做,机器人将难以解析您的表单,记录POST数据,并垃圾邮件您的网站。
安装
要安装此包,只需遵循以下快速简便的步骤。
Composer
通过打开 composer.json
文件并在 require
中添加以下内容通过Composer获取此包
"kim/defender": "~1.0"
之后,运行 composer update
或 composer install
。
服务提供者和别名
接下来,打开 config/app.php
并将以下内容添加到您的提供者数组中
Kim\Defender\DefenderServiceProvider::class
并将其添加到您的别名数组中
'Defender' => Kim\Defender\DefenderFacade::class
使用
创建输入字段
通常,这是您创建用户名输入字段的方式
<input type="text" name="username">
但是,我们想要随机化名称,为此,我们使用Defender外观
<input type="text" name="{{ Defender::username() }}">
以下是包内置的一些其他常见输入(如电子邮件和密码)。
<input type="email" name="{{ Defender::email() }}"> <input type="password" name="{{ Defender::password() }}">
您也可以通过使用 get
方法并传递输入名称来轻松创建自己的自定义类型。
<input type="text" name="{{ Defender::get('custom') }}"> <textarea name="{{ Defender::get('message') }}"></textarea> <input type="date" name="{{ Defender::get('some_date_field') }}">
话虽如此,我相信许多人都想知道如果名称都是随机的,如何检索值。这很简单。在您的控制器中,您可以使用相同的方法轻松检索这些值。
示例控制器
// Import it at the top
use Defender;
public function example(Request $request)
{
$email = $request->input( Defender::email() );
$username = $request->input( Defender::username() );
$custom = $request->input( Defender::get('custom') );
}
诱饵
这都很好,但要使其更加坚不可摧,我们需要一些诱饵。这些是编辑字段,对人类不可见。如果机器人填写了它们,那么我们知道要拒绝提交。我们可以以多种方式创建诱饵。
最基本的方法是使用 baitToken
方法。这简单创建了一个随机令牌作为诱饵。然而,它并没有隐藏字段。我建议使用JavaScript或CSS来隐藏此输入。
<input type="text" name="{{ Defender::baitToken() }}"> <!-- Output: <input type="text" name="some_random_string"> -->
baitField
方法创建了一个随机类型的输入(文本、电子邮件、密码、单选按钮、复选框等)。也应用了随机样式来隐藏这些输入。
{{ Defender::baitField() }}
<!-- Output: <input type="random_type" name="some_random_string" style="random_styling_that_hides_this"> -->
最后,我们有 baitFields
方法。此方法不仅创建了一个随机输入字段,而且还创建了一个随机数量的输入字段。
{{ Defender::baitFields() }}
<!-- Output x1 to x5: <input type="random_type" name="some_random_string" style="random_styling_that_hides_this"> -->
baitFields
方法还接受一个整数参数。例如,Defender::baitFields(20)
将输出1到20个隐藏诱饵。
验证和拒绝
您可以使用相同的方法验证字段。
// Import the Defender facade
use Defender;
// Add to the rules
public function rules()
{
return [
Defender::username() => 'required'
];
}
关于拒绝蜜罐,最简单的方法是添加包的 DefendAgainstSpam
中间件。要这样做,打开 app/Http/Kernel.php
文件,并将中间件添加到 $middleware
或 $routeMiddleware
数组中。如果您将其添加到 $middleware
数组,则此包将检查每个请求中的蜜罐。这是处理它最容易的方法。然而,如果您想将中间件应用于特定路由,则需要将其添加到您的 $routeMiddleware
数组中。下面展示了两个示例。
// Add here if you want to automatically check all routes
protected $middleware = [
...
\Kim\Defender\Middleware\DefendAgainstSpam::class
];
// Add here if you want to manually check specific routes
protected $routeMiddleware = [
'defend' => \Kim\Defender\Middleware\DefendAgainstSpam::class
];
如果您将其添加到 $routeMiddleware
,现在您需要手动检查特定路由,因此修改您的路由文件以反映这一点。
Route::get('/example', [
'as' => 'example'
'middleware' => 'defend',
'uses' => 'ExampleController@store'
]);
如果中间件捕捉到潜在的垃圾邮件发送者,它将抛出 InvalidFormException
异常。您可以在您的 app/Exceptions/Handler.php
文件中捕获此异常并执行您想要的任何操作。
public function render($request, Exception $e)
{
if ($e instanceof \Kim\Defender\Exceptions\InvalidFormException) {
// This example just redirect them back home. However, you probably
// also want to do other things like: log the time, ip, etc.
return redirect('/');
}
return parent::render($request, $e);
}
最后,对于那些不想使用中间件的人来说,您可以使用自定义验证规则 'reject'。
public function rules()
{
$rules = [
// Your rules..
];
// We reject the bait here
foreach (Defender::bait() as $bait) {
$rules[$bait] = 'reject';
}
return $rules;
}
许可证
此包是免费软件,根据 MIT 许可证的条款分发。