了解 SpamAssassin HK_RANDOM 正则表达式

Understanding SpamAssassin HK_RANDOM regex

SpamAssassin 有几个尝试检测 "random looking" 值的规则。例如:

/^(?!(?:mail|bounce)[_.-]|[^@]*(?:[+=^~\#]|mcgr|kpmg|nlpbr|ndqv|lcgc|cplpr|-mailer@)|[^@]{26}|.*?@.{0,20}\bcmp-info\.com$)[^@]*(?:[bcdfgjklmnpqrtvwxz]{5}|[aeiouy]{5}|([a-z]{1,2})(?:){3})/mi

我知道正则表达式的第一部分阻止了某些情况的匹配:

(?!(?:mail|bounce)[_.-]|[^@]*(?:[+=^~\#]|mcgr|kpmg|nlpbr|ndqv|lcgc|cplpr|-mailer@)|[^@]{26}|.*?@.{0,20}\bcmp-info\.com$)

但是,我无法理解第二部分如何检测"randomness"。任何帮助将不胜感激!

/[^@]*(?:[bcdfgjklmnpqrtvwxz]{5}|[aeiouy]{5}|([a-z]{1,2})(?:){3})/mi

它将匹配包含 5 个连续辅音的字符串(由于某些原因不包括 hs):

[bcdfgjklmnpqrtvwxz]{5}

或5个连续元音:

[aeiouy]{5}

或同一个字母或一对字母重复 3 次(出现 4 次):

([a-z]{1,2})(?:){3}

以下是它将匹配的几个字符串示例:

somethingmkfkgkmsomething
aiaioe
totototo
aaaa

它显​​然无法检测随机性,但它可以识别在有意义的字符串中不经常出现的模式,并提到这些模式看起来是随机的。

这些模式也有可能是 "from experience" 在分析了垃圾邮件发送者制作的大量电子邮件之后构建的,并且实际上反映了这些垃圾邮件发送者使用的工具背后的算法或他们使用的过程创建这些电子邮件(例如,某种程度的键盘混搭?)。

底部注释是您无法检测单个数据的随机性。然而,您可以做的是尝试检测目的,如果您没有发现任何目的,则据您所知假设它是随机的。 SpamAssasin 假设了一些关于人类交流的规则(这可能更好或更坏地适合不同的语言:因为它会标记几种形式的法语不完美时态,例如“échouaient”),和如果内容与它们不匹配,它将报告为 "random".