如何高效识别并拦截拼接式恶意域名 spam

17次阅读

如何高效识别并拦截拼接式恶意域名 spam

本文介绍一种通过预处理+精确匹配的方式,精准识别形如 `a#b#c#d#e#f.com` 或 `a b c d e f.com` 等混淆拼接的恶意域名,避免传统正则误杀,提升反垃圾过滤的准确率与鲁棒性。

在对抗持续进化的垃圾信息发送者时,单纯依赖复杂正则表达式(如基于字符顺序和分隔符的模糊匹配)往往导致高误报率——例如原始代码中使用 (?

更可靠的做法是:先归一化(sanitization),再精确判定。核心思路是剥离所有非字母数字字符,还原出“干净”的纯字母序列,再判断是否包含目标关键词(如 abcdef):

// 步骤1:移除所有非字母数字字符(保留 a-z, A-Z, 0-9) $cleaned = preg_replace('/[^A-Za-z0-9]/', '', $textfield);  // 步骤2:检查清洗后字符串是否包含目标域名主体(不区分大小写) if (stripos($cleaned, 'abcdef') !== false) {     // 触发拦截逻辑,例如标记为垃圾、拒绝提交或加入黑名单     throw new Exception('Suspicious obfuscated domain detected.'); }

优势说明

  • 高精度:仅当 a, b, c, d, e, f 按序连续出现(中间无干扰字符)时才触发,完全规避乱序匹配问题;
  • 强鲁棒性:自动兼容 a.b.c.d.e.f.com、a-b-c-d-e-f.com、a【b】c【d】e【f】.com 等数十种变体;
  • 低开销:两次轻量级字符串操作,远优于多层嵌套正则回溯,性能稳定;
  • 可扩展:支持批量检测,只需维护一个关键词数组:
    $spamKeywords = ['abcdef', 'xyzspam', 'phishlink']; foreach ($spamKeywords as $kw) {     if (stripos($cleaned, $kw) !== false) {         return true; // 恶意命中     } }

⚠️ 注意事项

  • 若需防止 abcdefg(超长匹配)被误判,可改用单词边界匹配:preg_match(‘/b’ . preg_quote(‘abcdef’, ‘/’) . ‘b/i’, $cleaned),但通常域名主体本身无空格,直接 stripos 更高效;
  • 建议结合其他维度(如高频提交 IP、相似文本聚类、dns 可解析性校验)构建多层防御,避免单点绕过;
  • 对用户可见内容(如评论、表单),清洗后应保留原始文本用于审计,仅将 $cleaned 用于检测逻辑。

该方法已在多个社区平台反 spam 实践中验证有效,兼顾准确性、可维护性与执行效率,是应对“字符混淆型”域名攻击的推荐方案。

text=ZqhQzanResources