我遇到了一些垃圾邮件问题,它们的主题字段采用 utf8 base 64 编码,并使用奇怪的字符来欺骗过滤规则
例子:
收到的电子邮件的原始主题
Subject: =?UTF-8?B?UklGSVVU0J4gREkgUklOTtCeVtCe?=#821538
spamassasin 解码后包含此字符О代替哦
__SUBJ_NOT_SHORT ======> got hit: "RIFIUTО DI RINNOVO"
所以规则不会触发
header __SUBJECT_PHISHING_3 Subject=~ /(RIFIUTО DI RINNОVО)/i
然而,这些字符在电子邮件客户端(Outlook 或 Thunderbird)中显示为哦并以意大利语正确显示结果,以欺骗用户
RIFIUTО DI RINNОVО
因此,垃圾邮件发送者会插入奇怪的字符,因为他们知道客户端会以意大利语正确显示这些字符,而 spamassassin 不会触发规则
有一种解决方案可以匹配这些字符或像电子邮件客户端那样解码它们,而不必在垃圾邮件发送者每次插入特殊字符以绕过过滤器时创建新规则
发现同样的问题并给出一些提示 https://users.spamassassin.apache.narkive.com/LhGDKXkm/utf-8-spam-rules
答案1
我认为这个问题没有简单的解决办法。
这里的问题是,电子邮件客户端正确解码了 base64 编码的文本,如下所示不是有一个“O”(如“拉丁大写字母 O”)字符,但有一个西里尔字母(“西里尔大写字母 O”)。前者是 U+004F,后者是 U+041E。
因此您的正则表达式将不匹配,原因很简单,因为对于正则表达式解析器(以及一般程序)而言,这两个字符并不相同。对于人类而言,它们是相同的,因为它们看起来完全一样,所以显示哪一个并不重要。我不知道有任何简单的解决方案可以让您根据外观匹配文本。
顺便说一句,Spamassassin 应该能识别西里尔字符,并应该显示该字符,而不是乱码“О”(但说实话,那样会更令人困惑)。您应该检查服务器的默认字符编码。