作者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