WordPress 如何防止惡意的垃圾填表?有哪些常見的方式?

在請網站設計公司完成網站後,你是否有遭遇到 WordPress 表單經常會收到惡意垃圾填表的困擾?我們最常見的處理方式是透過限制 IP 地址或是安裝 Google reCAPTCHA 來阻擋這個情況。

大多數狀況會建議先使用 reCAPTCHA 來阻擋惡意填表,其次才是使用 IP 地址。原因是使用 IP 地址是一種比較消極「有洞補洞」的防範手法,因為你永遠無法預測攻擊者是使用哪一個 IP 位置來進行攻擊,而 reCAPTCHA 透過大數據跟人工智慧可以有效的偵測填表人是否為機器人,是一個通用的防範手段。

使用 Google reCAPTCHA

市面上有許多驗證是否為機器人的服務,當中最有效果的莫過於 Google 的「我不是機器人」,這個服務事實上是 Google reCAPTCHA。在使用這個服務前,你要先確認你目前 WordPress 的表單系統是否支援整合這個服務,例如知名的 Contact Form 7、Gravity Form 或 Elementor 表單都是有支援這個服務的。

當你確認表單可以整合這個服務後,你會需要到 Google reCAPTCHA 的官方網站申請取得 SITE_KEY 和 SITE_SECRET 後輸入至表單系統的欄位中。

你可能有注意到 reCAPTCHA 有分為 v2 和 v3,這兩者的差異是 reCAPTCHA v2 是傳統的「我不是機器人」,他會顯示一個介面在使用者填表的過程中要求填表人勾選;reCAPTCHA v3 是新版本的 invisible reCAPTCHA,它不會有直接的驗證介面而是在背景驗證填表的是否為機器人,在安裝後在畫面的右下角會出現本站使用 reCAPTCHA 的圖示,如果你覺得很惱人的話你可以使用 CSS 將它隱藏。

這邊提供如何隱藏 reCAPTCHA 圖示的 CSS 語法,你可以把它加入到表單的頁面內或是直接加在整站中。

.grecaptcha-badge {
    visibility: hidden;
}

在 Elementor 表單中使用 Google reCAPTCHA

如果你是使用 Elementor 的表單元件,那麼你不需要額外安裝其他外掛就能夠整合 Google reCAPTCHA。

你可以在編輯表單中新增「reCAPTCHA V3」的欄位後,前往 Elementor 設定的「整合」頁籤輸入網站密鑰 (Site Key) 跟安全密鑰 (Site Secret)。

在 Elementor 編輯表單裡加入 reCAPTCHA v3 欄位

參考:reCAPTCHA & Elementor Integration

在 Contact Form 7 表單中使用 Google reCAPTCHA

如果你是使用 Contact Form 7 的表單元件,那麼你不需要額外安裝其他外掛就能夠整合 Google reCAPTCHA。

前往後台的「聯絡表單 > 整合」裡,你可以開啟 reCAPTCHA 設定模組後輸入 Site Key 和 Site Secret 即可。

在 Contact Form 7 裡設定 reCAPTCHA 整合模組

參考:reCAPTCHA v3 | Contact Form 7

在 Gravity Form 表單中使用 Google reCAPTCHA

如果你是使用 Gravity Form 的表單元件,那麼你不需要額外安裝其他外掛就能夠整合 Google reCAPTCHA。

前往後台的任ㄧ表單中,展開進階欄位後將「驗證碼」欄位加入到表單內。加入完成後你可以到「表單 > 設定 > reCAPTCHA 驗證碼設置」的區塊輸入 Site Key 和 Site Secret

Gravity Form 與 Google reCAPTCHA 整合

限制 IP 地址

如果你想要使用限制 IP 地址的方式來避免惡意的垃圾填表,你可以選擇在 WordPress 端或是網站伺服器端進行這個操作。要注意在使用這個方式限制時要先確認攻擊方是否使用相同或是重複的 IP 地址,如果你無法特定攻擊者使用的 IP 地址,那麼這麼阻擋方式並不會是有效的防禦手段。

在 WordPress 限制 IP 地址存取

你可以在 WordPress 安裝一些安全防護外掛來限制可存取網站的 IP 地址,例如 Restricted Site Access;或是你可以尋找你目前正在使用的表單元件是否有提供這樣的安全設定,假設你是使用 Gravity Form,你可以使用 Block IPs 這個擴充元件來阻擋特定 IP 的填表。

在網站伺服器端限制 IP 地址存取

如果你想要在網站伺服器端限制 IP 地址存取,這個是一個比較進階的操作。你會需要先知道你目前正在使用的網站伺服器是哪一種軟體,以及確認你有存取網站伺服器所有設定的權限,最常見用於服務 WordPress 的網站伺服器是 Apache 和 Nginx。

使用 Apache 限制 IP 存取

如果你是使用 Apache,你可以修改網站的 .htaccess 檔案來限制 IP,下面是一個設定案例:

Deny from 1.2.3.4

使用 Nginx 限制 IP 存取

如果你是使用 Nginx,你可以修改網站的設定檔來限制 IP,下面是一個設定案例:

location / {
   deny  1.2.3.4;
}

如果仍然無法防止惡意的垃圾填表

如果你使用了以上兩種方式仍然無法防範惡意填表,那麼你可能會需要檢查你的主機和 WordPress 是否有其他的安全性問題。我們會建議你要將 WordPress 核心版本和表單系統外掛版本皆升級為最新版,這樣可以確保攻擊者不是從已知的安全漏洞進行攻擊。建議你可以尋求專業的主機代管服務廠商進行洽詢,確保你的網站安全沒有疑慮。