
本文介绍一种高效识别并拦截“字符间插入干扰符”的 spam 域名(如 a#b#c#d#e#f.com)的方法:先统一清洗文本,再进行精确子串匹配,避免传统正则误伤正常用户。
在对抗持续性垃圾信息攻击时,单纯依赖复杂正则表达式(如 /(?
更稳健的思路是两阶段防御:
- 预处理清洗(Sanitization):移除所有非字母数字字符,还原潜在的“伪装域名”为原始字符序列;
- 精确子串匹配(Exact Substring Check):在清洗后的纯文本中,直接查找目标关键词(如 abcdef)。
示例 PHP 实现如下:
// 步骤1:仅保留字母和数字,消除 #、空格、$、. 等干扰符
$cleaned = preg_replace('/[^A-Za-z0-9]/', '', $textfield);
// 步骤2:检查是否包含被滥用的核心域名片段(区分大小写可选)
if (stripos($cleaned, 'abcdef') !== false) {
// 触发拦截逻辑,如标记为垃圾、拒绝提交或加入黑名单
throw new Exception('Spam domain pattern detected: abcdef');
}✅ 优势说明:
- 高精度:abcdef 必须连续出现,不会因 aXbYcZd... 等乱序匹配而误报;
- 强鲁棒性:支持 a b c d e f.com、a$b$c$d$e$f.com、a#b#c#d#e#f.com、甚至 a1b2c3d4e5f6.com 等全部变体;
- 高性能:preg_replace + stripos 比多层回溯正则快一个数量级,适合高并发场景。
⚠️ 注意事项:
- 若目标域名含数字(如 ab3cd4f.com),清洗后仍为 ab3cd4f,需确保关键词字符串同步更新;
- 建议将清洗+匹配逻辑封装为独立函数,并配合日志记录可疑原文,便于后续分析攻击模式;
- 对高频命中域名,可升级为「模糊哈希」或「编辑距离」校验,以应对轻微变形(如 abcdeff → abcdef),但常规场景中严格子串匹配已足够可靠。
通过将“噪声剥离”与“确定性匹配”解耦,你不仅能终结当前 spammer 的绕过策略,还能构建可扩展、易维护的文本净化基础能力。










