Honeypot 类

Honeypot 类用于检测 CodeIgniter4 应用程序中的 Bot 请求,前提是在 app/Config/Filters.php 文件中启用。实现方式是在表单中附加一个字段,该字段对人类隐藏但对 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 创建自定义过滤器,并相应修改 app/Config/Filters.php 中的 $aliases

自定义 Honeypot

Honeypot 支持自定义。以下字段可在 app/Config/Honeypot.php.env 中设置:

  • $hidden - truefalse,控制 honeypot 字段可见性;默认为 true

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

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

  • $template - honeypot 使用的表单字段模板;默认为 '<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'