留言區淪陷?別只會裝 Akismet!資深工程師的 WordPress 反垃圾留言『縱深防禦』戰術

2025/08/22 | 網站安全與防護

留言區淪陷?別只會裝 Akismet!資深工程師的 WordPress 反垃圾留言『縱深防禦』戰術

嗨,我是浪花科技的 Eric。身為一個每天在 WordPress 世界裡打滾的工程師,最不想在早上一邊喝著咖啡、一邊開後台時看到的景象,大概就是留言區那滿江紅的待審核通知了。點開一看,全是些「Buy Cheap Rolex」、「Amazing SEO Service」、「俄羅斯美女等你喔」之類的垃圾留言(Spam)。說真的,都 2025 年了,這些機器人還真是毅力驚人啊。

很多站長的第一反應就是「裝個 Akismet 就好了吧?」。嗯…這就像你家大門只裝了一道喇叭鎖,對付君子可以,但對於有心(或根本沒心,只是個程式)的宵小來說,根本不堪一擊。今天,我就要以一個資深工程師的囉嗦角度,帶你跳脫「單點防禦」的思維,建構一套駭客看了都搖頭的 WordPress 反垃圾留言『縱深防禦』策略。

為什麼垃圾留言(Spam)像打不死的蟑螂?

在我們開戰之前,得先了解敵人的動機。知己知彼,百戰不殆嘛。垃圾留言發動者(Spammer)的目的不外乎這幾種:

  • 黑帽 SEO (Black Hat SEO): 他們最主要的目的,就是在你的網站上留下帶有他們網站的連結,企圖騙取搜尋引擎的權重。雖然現在 Google 已經很聰明,`nofollow` 屬性也讓這招效果大減,但他們還是樂此不疲,以量取勝。
  • 惡意軟體與釣魚網站: 點擊那些看起來無害的短網址,你可能會被導到一個充滿惡意軟體的網站,或是竊取你個資的釣魚頁面。這對你網站的訪客來說是個巨大的安全威脅。
  • 廣告與銷售: 最直白的,就是推銷他們的產品或服務,雖然轉換率極低,但因為發送成本趨近於零,所以他們根本不在乎。

早期的 Spam 可能是人工發送,但現在 99.9% 都是由自動化程式(Bot)執行的。這些 Bot 會掃描全網的 WordPress 網站,找到留言表單就自動填入預設的內容送出。所以,我們的防禦策略核心,就是要讓這些「非人類」的行為寸步難行。

第一層防線:WordPress 內建設定的銅牆鐵壁

在安裝任何外掛之前,我們先把 WordPress 送給你的免費武器用到極致。這就像練武功要先蹲好馬步,基本功紮實了,後面的招式才能發揮威力。

h3>設定 > 討論區

進到 WordPress 後台的「設定」>「討論區」,這裡有幾個必勾的選項:

  • 留言必須由管理員手動核准: 這是最基本、也最有效的防線。雖然會增加管理成本,但能確保沒有任何垃圾留言會出現在你的網站前台。我強烈建議所有網站都開啟這個選項。
  • 留言者必須填寫姓名和電子郵件: 增加 Bot 操作的複雜度,雖然這對 Bot 來說不是難事,但至少能擋掉最懶惰的那一批。
  • 留言內含超過 [1] 個超連結時,會被移至待審清單: 這是個超讚的設定!正常的訪客留言很少會包含一堆連結,但 Spam 幾乎全是連結。我通常會設定為 1 或 2,效果立竿見影。

h3>留言黑名單

在同一個設定頁面下方,你會看到「留言黑名單」的欄位。你可以把常見的垃圾留言關鍵字(例如:viagra, casino, Rolex…)或特定的 IP 位址、網域放進去。符合條件的留言會直接被丟到垃圾桶,連審核都不用。

老實說,手動維護這個清單有點累,但對於那些一直針對你網站的特定 Spam 來說,這是個精準打擊的好方法。

第二層防線:用「障眼法」迷惑機器人

當基本設定完成後,我們就要開始玩點心理戰和技術戰了。這一層的目標是讓機器人「看不懂」或「誤判」你的表單,但又不影響真人訪客的體驗。

h3>蜜罐(Honeypot)技術:給機器人吃的毒蘋果

我個人非常喜歡這個技術,它優雅且對使用者完全無干擾。原理很簡單:

  1. 我們用 CSS 在留言表單裡藏一個欄位,例如叫做 `website_url`。
  2. 真人訪客因為看不到這個欄位,所以不會去填寫它。
  3. 但是,愚蠢的機器人會掃描 HTML 原始碼,看到所有欄位就通通填滿。
  4. 當後端收到表單提交時,只要檢查這個被隱藏的 `website_url` 欄位有沒有被填寫,一但有內容,100% 就是機器人!直接擋掉,連資料庫都不用進。

很多安全外掛或表單外掛都內建了這個功能,例如 Antispam Bee 就是一個很好的免費選擇。它對使用者體驗的影響是零,這點真的大加分。

h3>reCAPTCHA:請證明你不是機器人

你一定看過 Google 的「我不是機器人」勾選框,這就是 reCAPTCHA。它的原理是透過分析使用者的滑鼠軌跡、點擊行為、瀏覽器環境等數十種參數,來判斷操作者是人還是 Bot。

  • reCAPTCHA v2 (Checkbox): 最常見的勾選框,簡單明瞭。
  • reCAPTCHA v2 (Invisible): 不會顯示勾選框,只在 Google 懷疑使用者行為時才跳出挑戰。對體驗比較好。
  • reCAPTCHA v3: 完全背景運作,它會給每個使用者一個分數(0.0 到 1.0),分數越低越像機器人。你可以在後台設定一個閾值,例如低於 0.5 分的留言就直接阻擋。這是目前體驗最好的版本,但設定上需要多花點心思。

雖然 reCAPTCHA 很有效,但缺點是會載入 Google 的腳本,對網站速度有那麼一丁點影響,而且有些使用者會覺得被打擾。這是一個效果和體驗之間的權衡。

第三層防線:雲端智慧與程式碼的終極防禦

如果前面兩層都擋不住,那代表你遇到的是更聰明的機器人。這時候,我們需要更強大的武器。

h3>雲端過濾服務 (Akismet / CleanTalk)

這就是大名鼎鼎的 Akismet 的主場了。這類服務的運作方式是,當你的網站收到一則留言,它會把留言內容、IP、Email 等資訊打包送到它的雲端伺服器。伺服器上有一個由全球數百萬個網站共同訓練的超大資料庫和 AI 模型,用來判斷這則留言是不是垃圾。判斷完再把結果告訴你的網站。

優點是判斷非常精準,能擋掉很多偽裝得很好的 Spam。缺點是 Akismet 商業使用是需要付費的,而且因為多了一次外部 API 的請求,理論上會比本機端的防禦慢一點點(雖然通常感覺不出來)。

h3>自訂程式碼:身為工程師的最後倔強

有時候,你會遇到一些很特殊的攻擊模式,例如只用特定語言(像俄文、日文)的 Spam。這時候,我們就可以在主題的 `functions.php` 裡加入一些自訂規則,來個釜底抽薪。例如,我們可以寫一段程式碼來阻擋所有包含西里爾字母(俄文)的留言。

(工程師的小囉嗦:在你動 `functions.php` 之前,拜託,先備份!而且最好是透過子佈景主題來修改,不然你主題一更新,寫的程式碼就全沒了。不要問我為什麼知道,都是淚。)


function block_cyrillic_comments( $commentdata ) {
    $pattern = '/[\p{Cyrillic}]/u';
    if ( preg_match( $pattern, $commentdata['comment_content'] ) ) {
        wp_die( 'Cyrillic characters are not allowed in comments.' );
    }
    return $commentdata;
}
add_filter( 'preprocess_comment', 'block_cyrillic_comments' );

上面這段程式碼會檢查留言內容,一旦發現有俄文字母,就直接拒絕提交。你可以依樣畫葫蘆,改成阻擋特定關鍵字、或限制留言長度等等,彈性非常大。

結論:防禦是個體系,不是單一按鈕

總結一下我們的 WordPress 反垃圾留言『縱深防禦』策略:

  • 第一層(基礎): 善用 WordPress 內建的討論區設定與黑名單。
  • 第二層(無感防禦): 導入 Honeypot 技術,在不影響使用者的前提下迷惑機器人。
  • 第三層(主動防禦): 根據需求選擇性使用 reCAPTCHA,增加機器人破解的難度。
  • 第四層(智慧過濾): 讓 Akismet 或類似的雲端服務幫你做最專業的判斷。
  • 第五層(客製化規則): 針對特定攻擊模式,撰寫自己的程式碼來精準打擊。

你看,這就像蓋一座城堡,有護城河、有城牆、有箭塔、還有最終的守城衛兵。單靠一道防線是絕對不夠的。透過這樣層層堆疊的策略,你可以把管理垃圾留言的時間降到最低,把更多精力花在真正重要的事情上——也就是產出優質的內容。

希望這套來自工程師的防禦藍圖對你有幫助。別再讓你的留言區成為法外之地了!

延伸閱讀

如果你對於網站安全策略、效能優化,或是需要更客製化的 WordPress 開發有任何需求,別客氣,我們浪花科技的團隊非常樂意協助你。我們的專業就是解決這些棘手的技術問題,讓你的網站不只安全,更能飛速成長。

→ 立即聯繫浪花科技,打造固若金湯的 WordPress 網站

常見問題 (FAQ)

Q1: 只安裝 Akismet 來防堵垃圾留言足夠嗎?

A1: Akismet 非常強大,但單靠它並不是最理想的策略。最好的方法是採取「縱深防禦」,結合 WordPress 內建設定(如手動審核、連結數量限制)、Honeypot 技術來阻擋基礎機器人,再讓 Akismet 處理更進階的垃圾留言。多層防護可以大幅降低 Akismet 的負擔,並達到近乎 100% 的防禦效果。

Q2: 這些反垃圾留言的措施會不會拖慢我的網站速度?

A2: 這取決於你使用的方法。WordPress 內建設定和 Honeypot 技術對網站速度的影響微乎其微。而像 Google reCAPTCHA 或 Akismet 這類需要與外部伺服器溝通的服務,會增加微小的載入時間。不過,這些影響通常非常小,遠小於被垃圾留言灌爆資料庫所造成的效能問題。因此,這點小小的效能換取網站的乾淨與安全是非常值得的。

Q3: 蜜罐(Honeypot)和驗證碼(CAPTCHA)有什麼根本上的不同?

A3: 兩者都是為了區分人與機器人,但原理完全不同。蜜罐(Honeypot)對真人使用者是「隱形」的,它設置一個只有機器人會去填寫的隱藏欄位,對使用者體驗完全無干擾。而驗證碼(CAPTCHA)則需要使用者「主動」進行一個動作來證明自己是人類,例如勾選方塊、辨識圖片等,會輕微干擾使用流程。

Q4: 我的聯絡表單也收到很多垃圾訊息,這篇文章的方法也適用嗎?

A4: 絕對適用!垃圾訊息不僅限於留言區,聯絡表單、註冊表單都是重災區。本文提到的防禦概念,特別是蜜罐(Honeypot)和 reCAPTCHA,同樣可以完美應用在各種表單上。大多數主流的表單外掛(如 WPForms, Contact Form 7)都支援這些防垃圾訊息的功能,記得去設定中將它們開啟!

 
立即諮詢,索取免費1年網站保固