好像應該起個頭

看板CSSE (電腦科學及軟體工程)作者 (讀者)時間20年前 (2004/12/24 13:30), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/7 (看更多)
只是一時之間也不知道該說什麼比較好。 由於抓不準板友的程度,就儘量說一些大學生也能懂的東西吧。 嗯,我的信箱由於公開已久,又不是 .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
文章代碼(AID): #11owc8-e (CSSE)
文章代碼(AID): #11owc8-e (CSSE)