Overview

Recently, I developed a WordPress plugin called WP shieldon. The plugin is based on Shieldon, a PHP library that I made. If you are using WordPress as your website platform, congrats, you can download and use it through WordPress's official plugin dictionary immediately.

Requirement

  • PHP version > 7.1.0
  • WordPress version > 4.0

Download

Source Download
WordPress https://wordpress.org/plugins/wp-shieldon
GitHub https://github.com/terrylinooo/wp-shieldon/releases
PHP Composer composer create-project terrylinooo/wp-shieldon wp-shieldon

Introduction

Similar solutions

Its main purpose is anti-scraping. The similar solutions on server-side are mod_evasive module for Apache and ngx_http_limit_req module for Nginx.

Both are used to limit the requests coming from a single IP address. Many visitors are probably from the same IP address as they are in the same LAN (for example, schools, coffee shops.). Therefore they are blocked because of reaching the limit.

The most critical problem is not about blocking real users, is about blocking the search engines such as Google, Bing, Yahoo. Blocking search engines impacts the SERP, the price you pay is losing traffic brought from Search engines to your website. That is why I do not use those server-side modules.

Shieldon protection

Shieldon analyzes a user's behavior on application-layer, using multiple filtering methods to avoid blocking a user by mistake. Even though a user has temporarily blocked, he or she can get unblocked by solving the CAPTCHA.

Benefit of using WP Shieldon

WP Shieldon 在載入外掛的順序是第一位,它在封鎖了惡意的訪問後,就跳出驗證碼的頁面,中斷後續的外掛及版型載入,節省惡意訪問造成多餘流量傳輸及後續處理其它外掛功能及 WordPress 讀取文章、列表或搜尋等等行為的 CPU 開銷。

對於使用流量計費的雲端服務例如 Google GCE、Amazon EC2 等等,流量都是成本。CPU 也不會因為被惡意刷新某些 SQL 較吃重的頁面而往上飆。

How It Works

以下的驗證方式在 WP Shieldon 的設定介紹都可以找到設定,讓你自由選擇要開始那些驗證方式。

Filters

file

你必須啟用個別的過濾器才會進行該項的檢查。每個過濾條件可以設定可容忍的額度,預設值為 5,已經可以排除掉絕多數誤判的情況。

Cookie

WP Shieldon 會產生一組會產生 cookie 的 JavaScript 程式碼插入前端頁面,藉此過濾無法執行 JavaScript 的爬蟲。但這個方法無法過濾 browser-based 的爬蟲,例如使用 Selenium 的爬蟲。

有些正常使用者沒開啟 cookie 功能你也不需要理會了,他既沒辦法登入你的網站進行購物,放在你網站上的廣告也因為沒有 cookie 可以進行喜好追蹤,收益成效不彰。

Referrer

判斷 Header 資訊沒有顯示上一頁網址的記錄。一般而言只有直接從瀏覽器網址列直接輸入網址的初次拜訪為空值,其餘都會有記錄,藉此篩選掉一些爬蟲。

Components

file

Trusted Bots

這個組件為信賴的機器人,為開放一些受歡迎的搜尋引擎們例如 Google、Bing、Yahoo 等等。為必須開啟的組件。不然這些搜尋引擎的爬蟲機器人們會進入瀏覽頻率檢查。檢索網頁的頻率達到限制會被封鎖...。

啟用嚴格模式的話,會再比對一次 RDNS 和 IP 是否吻合。不吻合的情況很常見,例如百度的機器人 IP 有 RDNS,但 ping 那個 RDNS 卻沒有 IP 記錄。不過只是舉個例子。本外掛沒有把把百度放進清單中。

Header

啟用這個組件,並選擇嚴格模式,則會比對訪客有沒有一般瀏覽器訪客必帶的 Header 資訊,沒有就封鎖。

User-agent

Header 資訊沒帶來 User-agent 肯定是爬蟲初學者,直接擋了說。

Reverse DNS

Reverse DNS (RDNS) 中文為反向域名解析,也稱為 IP 反解 (IP Resolved),正常的電信用戶都會有一個 RDNS 對應一個 IP,例如中華電信的用戶的 IP: 61.216.101.55

file

大部分的搜尋引擎的爬蟲的 IP 也可以接析出 RDNS。無法解析出的情況,大部分就是不是正常用戶了,而是網路上的伺服器。

Basic Check

Frequency check

一般來說,一個用戶在一個網站上一天瀏覽 10 幾頁就算黏著很高了。在 Sheldon 套件有以下頻率設定。

file

分別為每秒,每分鐘、每小時、每天可以容許幾次瀏覽,一旦觸及這個數字,會暫時封鎖使用者進入驗證頁面,一旦使用者順利解決了驗證,用戶的瀏覽資料會重設。

如果你只想針對每分鐘作檢查,可以將其它數字設為 9999 達不到的數字,則只有每分鐘的頻率有機會被觸發限制。

Excluded URLs

file

如果你有一些特定網頁不想被 WP Shieldon 限制,你也可以在設定裡排除。

  • 符合字串開頭的網址會被排除。

WP Shieldon 預設保護登入頁、註冊頁及 XML RPC 防止暴力攻擊。如果你不想保護其中一項,可以在這裡設定。

IP Manager

file

分為全站、登入頁、註冊頁、XML RPC。

應用情境 - 全站不公開

全站設定自己或公司的固定 IP,並開啟 Deny All,則只有該 IP 可以順利瀏覽。適合一些科技公司的技術部門寫自己的技術文件,但只有自己公司的 IP 或 VPN 的 IP 可瀏覽。

Login protection

假設你沒有固定 IP,但也想用 IP 管理員保護你的登入頁面,你可以設定 passcode。

file

以這個例子,我設為 test

我的這個網址則會避開 IP 封鎖而可以進行登入。不過這個網址是只能你知道,務必記住並不要外流。

https://terryl.in/zh/wp-login.php?test

Online Session Control

工作階段 (Session) 是 Google Analytics 的翻譯,在這裡的工作階段和 Google Analytics 是一樣的意思,這樣大家會比較明白這個功能實際上就是限制幾個訪客能在線上瀏覽你的網站。

file

你可以設定在線上有幾個訪客可以瀏覽,例如 100,每個用戶能個瀏覽多久。例如 5 分鐘。在後台的 IP Session Table (工作階段表) 可以看即時報表。

Reports

Online session table

file

這個報表可以即時地觀察線上的狀況。前題是有打開線上工作階段控制這個功能。

Rule table

被過濾器及基本檢查篩選出異常的會被暫時封鎖,狀態是 CAPTCHA,意思是該 IP 正在驗證頁,該 IP 訪客或機器人要解除驗證才能繼續瀏覽。如果解決了驗證,該 IP 會被移除規則表。

預設被組件封鎖的是硬封鎖,不會有給放行的機會,所以並不會進入規格表,因為他們在組件檢查時就封鎖了,還沒到過濾器檢查。但你可以在這裡看到被 Trusted Bots 放行的搜尋引擎被列在這裡。

file

另外規格表有臨時封鎖個別 IP 的功能。為何說它是暫時的?因為如果你有開始重設資料週期,每天會固定重設這個表。如果你想要永遠封鎖 IP,請用 IP 管理員。

IP log table

記錄本次資料週期的訪客資料。

Dashboard

file

儀表板的日誌記錄是永遠的,不受資料週期影響。從外掛啟用之後每次訪客被 WP Shieldon 進行處理的所有資料都會記錄。

ps. 停用外掛及會清空所有資料。因為日誌檔這種東西不大重要。既然停用了或移除了,就清除囉。

Last modified: August 2, 2019

Author