用 htaccess 擋 spam

30 五月, 2006 (18:11) | Blog 系統

根治才是硬道理 !!

本來嘛,blog 的 spam 問題我都交給 Spam Karma 2 來處理,它也都能很勝任這個任務;但是有時候我還是會覺得很煩,畢竟每天要砍 1000+ 篇 spam 也是很累的一件事。所以我就在想,有沒有根治的方法呢 ? 當然啦,最根治的方法是直接用 firewall 通通擋掉,乾淨俐落不留痕跡,但是有的時候你所處的環境並不允許你放大絕招,這時候就該要考慮第二方案:用 .htaccess 來擋

在研究過一些做法後,我採用了下面這幾招:

第一招是針對 trackback spam 的,出自 SpamHuntress 之手:

<Files trackback>
<Limit POST>
SetEnvIf User-Agent "Mozilla" trackers
SetEnvIf User-Agent ^$ trackers

Order allow,deny
Allow from all
Deny from env=trackers
</Limit>
</Files>

這招的原理是這樣:幾乎所有的 browser 的 User-Agent 都有 Mozilla 這個字串 (連 IE 也有喔),trackback 理論上是由 server 而非 browser 送出,所以如果 POST 到你的 trackback 的人帶了 Mozilla 字串的話,它一定是有問題的;另一條規則是,如果來 trackback 的不帶 User-Agent 的話,也是有問題的。雖然這規則很笨,但是很有意思的是它竟然很有效 @_@! 這也許要感謝這些 spammer 用的軟體實在是太不思變通 XD

第二招是判斷 HTTP REQUEST 的 HEADER:

SetEnvIfNoCase X-AAAAAAAAAAAA 1 spammer=yes
SetEnvIfNoCase Via pinappleproxy spammer=yes
SetEnvIfNoCase Referer 6q.org spammer=yes
deny from env=spammer

SetEnvIfNoCase User-Agent "^sogou" bad_bot
deny from env=bad_bot

這裡包括兩段:第一段是判斷 spammer 的,如果你覺得哪些 Referer 讓你不順眼就順便加到 spammer 那個 tag 去;第二段是判斷 User-Agent 的,一樣,如果覺得哪些 bot 每次都講不聽、然後又不看 robots.txt 的話,就把它丟進 bad_bot 這個 tag 吧。

第三招和第四招是配合使用的。先講第四招,這是從 WordPress 總站抄來的:

RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*ijliao.info.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]

這招是用 referer 去擋掉那些直接對你的 wp-comments-post.php 狂抽猛送的 spammer,如果你發現你被 spammer 從第一篇文章一路轟炸到最後一篇的話,用這招多半可以發揮奇效 :)

最後講的是第三招,它是為了減輕第四招的 rewrite 負擔而產生的。在用了第四招以後,你就可以去檢查一下你的 access.log ,找找看 301 這個 return code,就可以發現通常都是某一些特定的 IP、或是某一連串特定的 IP 連過來的,這時候就要拿出大規模毀滅性武器:

# ban kornet
deny from 59.7
deny from 61.252
deny from 203.236
deny from 211.55
deny from 211.196
deny from 211.197
deny from 211.227
deny from 211.230
deny from 220.84
deny from 220.93
deny from 220.123
deny from 221.151
deny from 221.155
deny from 221.157
deny from 222.105
deny from 222.117
deny from 222.100
# ban hanaro
deny from 221.138
deny from 218.235
# others
deny from 59.87
deny from 61.23
deny from 61.111
deny from 194.206
deny from 211.232
deny from 219.2
deny from 220.27

直接把整個 class B 全部給 ban 掉 !! 在我這邊的例子來看,來的都是泡菜國的居多,我這樣一刀砍下或許有失手的,但是為了大局著想,我也只好向潛在的泡菜讀者說聲對不起… XD

以上這幾招做完,大概可以把大部份還沒升級的 spammer 幹掉;而剩下來的那些 (相當進步的,在 comment spam 前會先 GET 一次文章、也會帶 referer,跟真的使用者一樣),就還是要靠 Spam Karma 2 啦。不過我一開始也說了,這幾招本來的目的也就只是為了省點功夫,完全取代是不可能的 :)

Technorati Tags: , , ,

Comments

Comment from lukhnos
Time 2006/05/30 at 8:04 下午

讀到「直接把整個 class B 全部給 ban 掉 !! 」時,我竟然噗嗤大笑。大概是因為很過癮吧…… XD

Trackback from SKL
Time 2006/08/16 at 12:03 下午

WordPress Plugin – Bad Behavior…

因為黃河長輩說要打驗證碼很麻煩而且效果沒有 Spam Karma 2 好,所以就先把 WP-ImgCode 拿掉並且改用 Spam Karma 2 ,# 本來是想說等到 Spam 出現再裝…  XD可是突然想到好像在哪邊有看到有人…..

Pingback from Wordpress comments at Dennys’ blog
Time 2007/02/03 at 8:59 上午

[...] decoder 了, 譬如 PWNtcha) 3. 使用 Spam Karma 2, WordPress 也有內建一個 Akismet, 不過我是從一開始就用 SK2, 他的設定雖然複雜, [...]

Pingback from AppleBOY’s Blog » 如何擋掉 google, 大陸百度 搜尋引擎
Time 2007/06/21 at 10:15 上午

[...] 參考這篇:用 htaccess 擋 spam [...]

Write a comment