Honeypot 类

如果在 **appConfigFilters.php** 文件中启用,Honeypot 类可以确定何时 Bot 向 CodeIgniter4 应用程序发出请求。这是通过将表单字段附加到任何表单来完成的,该表单字段对人类隐藏,但对 Bot 可见。当数据输入到该字段时,假设请求来自 Bot,并且可以抛出 HoneypotException

启用 Honeypot

要启用 Honeypot,需要对 **app/Config/Filters.php** 进行更改。只需从 $globals 数组中取消 honeypot 的注释,例如

<?php

namespace Config;

use CodeIgniter\Config\BaseConfig;

class Filters extends BaseConfig
{
    // ...

    public $globals = [
        'before' => [
            'honeypot',
            // 'csrf',
            // 'invalidchars',
        ],
        'after' => [
            'toolbar',
            'honeypot',
            // 'secureheaders',
        ],
    ];

    // ...
}

一个 Honeypot 过滤器示例捆绑在一起,作为 **system/Filters/Honeypot.php**。如果它不合适,请在 **app/Filters/Honeypot.php** 中创建自己的,并相应地修改配置中的 $aliases

自定义蜜罐

蜜罐可以自定义。以下字段可以在 **app/Config/Honeypot.php** 或 **.env** 中设置。

  • $hidden - truefalse 用于控制蜜罐字段的可见性;默认值为 true

  • $label - 蜜罐字段的 HTML 标签,默认值为 'Fill This Field'

  • $name - 用于模板的 HTML 表单字段名称;默认值为 'honeypot'

  • $template - 用于蜜罐的表单字段模板;默认值为 '<label>{label}</label><input type="text" name="{name}" value="">'

  • $container - 模板的容器标签;默认值为 '<div style="display:none">{template}</div>'。如果您启用了 CSP,您可以移除 style="display:none"

  • $containerId - [自 v4.3.0 起] 此设置仅在您启用 CSP 时使用。您可以更改容器标签的 id 属性;默认值为 'hpc'