作者reader (读者)
看板CSSE
标题好像应该起个头
时间Fri Dec 24 14:57:41 2004
只是一时之间也不知道该说什麽比较好。
由於抓不准板友的程度,就尽量说一些大学生也能懂的东西吧。
嗯,我的信箱由於公开已久,又不是 .tw 的,所以广告信是愈来
愈多,一天少说也有几百封,多的时候一两千封也不在话下,曾
使用过 SpamAssassin 却成效不彰,最後受不了,只好自己来写
mail filter.
以下是一些心得和问题:
1. 许多广告信都没有合格的 From 栏位,因此检查 From 栏位的
格式正确与否,应该是第一道关卡。
2. 即使 From 格式正确了,但由於怕被人用此一栏位拦阻,所以
假造的地址大行其道,也有不少是申请免费信箱来发的。
而无论是假造的地址,或是用来发信的免费信箱,它们的共同
特色就是不像正常人会用的帐号。
这构成了广告信的最大特色,於是防堵这类帐号就成了关键的
一步。
我们可以想像,使用大量 j,q,x,z 等字母的帐号,不是正常的
信箱地址。
於是我参照由牛津字典得到的字母频率表来调整:
E 11.1607% 56.88 M 3.0129% 15.36
A 8.4966% 43.31 H 3.0034% 15.31
R 7.5809% 38.64 G 2.4705% 12.59
I 7.5448% 38.45 B 2.0720% 10.56
O 7.1635% 36.51 F 1.8121% 9.24
T 6.9509% 35.43 Y 1.7779% 9.06
N 6.6544% 33.92 W 1.2899% 6.57
S 5.7351% 29.23 K 1.1016% 5.61
L 5.4893% 27.98 V 1.0074% 5.13
C 4.5388% 23.13 X 0.2902% 1.48
U 3.6308% 18.51 Z 0.2722% 1.39
D 3.3844% 17.25 J 0.1965% 1.00
P 3.1671% 16.14 Q 0.1962% (1)
以 Q 为基准的话,就可以很明显看出 XZJQ 是最少见的字母,
UDPMHGBFYWKV 也算是少用的字母,而 EARIOTNSLC 则算是常用
字母。
我实际使用的检查表是这样的:
0 -> 1
1 -> 1
2 -> 1
3 -> 1
4 -> 1
5 -> 1
6 -> 1
7 -> 1
8 -> 1
9 -> 1
b -> 3
d -> 2
f -> 3
g -> 2
h -> 2
j -> 7
k -> 3
m -> 2
p -> 2
q -> 7
u -> 2
v -> 2
w -> 3
x -> 5
y -> 2
z -> 5
- -> 2
_ -> 3
[ -> 3
我把整个 e-mail address 去掉帐号第一个字母 (以 j 开头的
名字不少), 也去掉 root domain, 用这张表下去检查,加起来
超过 10 的就算违规,不但检查帐号也检查网域名称。
而光是这一招就可以去掉九成的国外广告信。目前这些参数,都
还是透过经验值调整,缺乏系统性的研究。
但这样会不会误挡呢? 还是有极少数人的信箱就是超烂的帐号,
这就要靠 whitelist 来补救了,目前是考虑将帐号的最後一个
字母为 x 的就不予计入。
有些人认为使用拼音法检查比较好,能拼音的才是好帐号,这个
我就不敢苟同,或许英语系国家是这样,但是华人的帐号若是用
拼音法检查,恐怕会问题百出,非常不适合一般化。
另一个问题是,汉语拼音的 j, q, x 使用相当频繁,是不是会
造成误挡率大增呢,由於我的中国朋友不很多,目前没有这个
问题。不过,这似乎是需要考虑的地方。
那能否动态地调整参数呢? 嗯,这是另一个问题,以後再说。
3. 来信地址的 root domain 是一个大问题。
很多国家根本就不会有人寄信过来,寄来的一定是假货,所以用
这个方法来挡,也可处理掉一些前一个方法的漏网之鱼。
可是怎样选择才是正确的呢? 例如如果不是知道 ptt.cc 这样的
domain name 存在,很容易就会把 .cc 也跟着挡掉了。
目前我认为采负面列表比正面列表来得好,虽然成效会比较差,
但出问题的机会比较小。
这要怎麽做才合宜,则会是一个大问题,目前我并没有系统性的
解决办法。
我发现这题目谈下去会很复杂,特别是标题和内文的检查,所以就先
讲到这里好了,这里只谈来信地址,以後再谈其他。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.222.173.26