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-true或false,控制 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'