这个PHP库用于在HTML表单中管理蜜罐。它将创建输入表单并执行必要的检查。

v3.3-stable 2022-03-28 09:30 UTC

README

这个PHP库用于在HTML表单中管理蜜罐。它将创建输入表单并执行必要的检查。

安装

推荐

前往您的项目根目录,并使用composer运行以下命令

composer require dominiquevienne/honeypot

然后使用以下代码创建您的应用程序引导文件

<?php
require __DIR__ . '/vendor/autoload.php';

$oForm  = new Dominiquevienne\Honeypot\Form();
echo $oForm->inputs();

手动安装

  • Github 上下载最新稳定版
  • 解压下载的文件
  • 将内容放入您的项目中
  • 使用类似代码加载对象
<?php
require __DIR__ . '/honeypot/src/Honeypot.php';
require __DIR__ . '/honeypot/src/Form.php';

$oForm  = new Dominiquevienne\Honeypot\Form();
echo $oForm->inputs();

Laravel

在Laravel中使用蜜罐就像这样简单

composer require dominiquevienne/honeypot

并在您的类中添加以下行

<?php
use \Dominiquevienne\Honeypot\Form;

class yourController {
  public function show() {
    /** some code of yours */
    $oForm  = new Form();
    return $oForm->inputs();
  }
}

Drupal 8

首先,前往您的Drupal 8项目根目录,并键入

composer require dominiquevienne/honeypot

在表单控制器(您构建表单的地方),添加

use Dominiquevienne\Honeypot\Form;

以便访问蜜罐表单构造函数。

使用设置键为 TRUEdrupalForm 配置数组实例化您的表单

在验证函数中使用标准函数执行检查。

工作原理

安装包后,蜜罐包括启用两个步骤

表单渲染

在这里,您将触发 Form::timeCheck(),它将存储表单渲染的日期和时间,并触发 Form::honeypotInput(),用于返回蜜罐表单元素。

这两个选项中的任何一个都是必须的。

<?php
$oForm          = new Dominiquevienne\Honeypot\Form();
$oForm->timeCheck();
$honeypotInputs = $oForm->inputs();
?>
<html>
<?php 
// All your HTML code before your form
?>
<form action="yourLandingPage.php" method="post">
<?php
// The standard fields of your form
echo $honeypotInputs;
?>
<input type="submit"/>
</html>

请注意,您需要隐藏蜜罐字段。为此,您有三个解决方案

  • 使用CSS(默认类为hide)
  • 使用JS(纯JavaScript、jQuery或其他)从DOM中删除元素。这已经通过使用默认函数 $oForm->inputs() 或使用 $oForm->getHoneypotScript()(这将返回一个纯JavaScript脚本,用于从DOM中删除蜜罐字段)来完成。

表单动作页面

在您在表单的着陆页脚本(表单元素的 action 属性)中执行真实工作之前,您将需要使用此代码

<?php
$oHoneypot  = new Dominiquevienne\Honeypot\Honeypot();
$checks     = $oHoneypot->checks();
if(!empty($checks)) {
  die('Your are a spammer');
}
// your code

可用的配置

创建对象时,您可以通过数组传递配置值。

<?php
$config = [
  'honeypotInputClass'  => 'myCssClass',
  'honeypotInputNames'  => [
    'name1',
    'name2',
  ],
  'formMethod'          => 'GET',
];
$oForm  = new Dominiquevienne\Honeypot\Form($config);

表单

honeypotInputMask

这是用于渲染输入字段的掩码。您可以使用 Form::getHoneypotInputMask() 获取当前值。

honeypotInputClass

这是用于蜜罐输入字段的CSS类。

honeypotInputType

这是输入字段的HTML类型。

honeypotInputName

强制指定特定名称的方式

honeypotInputNames

包含蜜罐将随机选择名称后跟哈希值的列表的数组。

formMethod

用于发送表单的HTTP方法

蜜罐

minFormCompletionTime

在将表单订阅者视为机器人之前,表单完成的时间(秒)

maxFailureAttempts

在被视为机器人之前,每个会话中接受的失败次数。当达到数字时,如果失败检查为ON,则整个会话期间的所有尝试都将被视为失败。

maxAttempts

在被视为机器人之前,每个会话中接受的尝试次数。当达到数字时,如果数量检查为ON,则整个会话期间的所有尝试都将被视为失败。

检查

提交表单时需要进行的检查数组。默认情况下,检查项为 ['timeCheck','honeypotCheck','tokenCheck','failureCheck','quantityCheck']

drupalForm

如果设置为 TRUE,则 Form::inputs() 将返回 Drupal FAPI 数组而不是原始 HTML