kim/defender

使用随机输入名称/诱饵来抵御垃圾邮件机器人。

1.0.0 2015-10-11 06:35 UTC

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 updatecomposer 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 许可证的条款分发。