3

我正在 CentOS 上锐化我的 SpamAssassin 过滤器。在我得到 *.link 和 .eu 域后,我喜欢标记超过 100 个字符的很长的域字符串。

条件是:

  • 以 http 或 https 开头
  • 可能包含也可能不包含 www
  • 以 EOL、换行符、空格、"、'、<

我想出了这个:

body     LONG_URL    (https?:\/\/)[^,;\"\'<\s$]{100,}
describe LONG_URL    URL with over 100 characters
score    LONG_URL    0.5

它适用于 REGEX 测试器,但不适用于 SpamAssassin

4

2 回答 2

1

你想写一个uri测试,而不是一个body测试。

于 2014-10-21T05:56:50.100 回答
1

要解决新的 TLD 问题,您确实需要一个正文规则。正如您在上面所写的,存在一些语法问题和一些不必要的计算成本。试试这个:

body     YELLO_LONG_BODY_URL  m@\bhttps?://[^\"\'<\s$]{100}@i
describe YELLO_LONG_BODY_URL  100+ char URL, https://stackoverflow.com/a/26919318
score    YELLO_LONG_BODY_URL  0.1

这在技术上是可行的,但我相信你会发现它会触发大量非垃圾邮件,尤其是营销邮件,尤其是如果你将绑定保持在 100 个字符(这太小了!)。我去掉了逗号和分号,因为它们可能是 URL 的一部分,而合法消息的 URL 长度只有一个字符太长,所以你可能只需要m@\bhttps?://\S{100}@i

警告:我以打击垃圾邮件为生,触手可及的数据很多。与 128 个字符以下的垃圾邮件相比,您会遇到更多的非垃圾邮件(“ham”)。没有大小范围会有非常好的垃圾邮件:火腿比例;0.900的S/O(又名precision)可能是可以接受的,但您确实希望更接近 1.000。根据我的测试,最好的范围是 192-256 个字符,但即使这样也太弱了(S/O = 0.862)而不能非常有用。使用超过 1024 个字符的链接(S/O = 0.057)几乎没有垃圾邮件。

我更改了此规则的名称。将您的规则归功于您的规则是很好的,这样当出现问题并且“信用”变成“责备”时,它们可以很容易地被识别为您的(而不是上游 SpamAssassin 的)......我什至在规则描述中链接了这个答案,以便您的用户可以了解更多。

于 2014-11-13T22:05:04.173 回答