RevealTheme偵測器的運作原理
當你在我們的某個偵測器中輸入一個URL時,在你看到結果之前的那兩秒鐘裡會發生很多事情。這裡為好奇的讀者提供技術解讀,包括那些我們無法透過工程手段解決的限制。
第1步:取得公開的HTML
當你提交一個URL時,我們的伺服器會使用標準的瀏覽器User-Agent取得該URL的公開網頁。這與你直接造訪該網站時瀏覽器收到的HTML完全相同。我們不繞過付費牆,不抓取受登入保護的內容,也不使用任何身分驗證。
取得使用20秒的逾時時間。我們最多跟隨10次重新導向(這涵蓋了HTTP → HTTPS、www → 無www以及按國家/地區的重新導向)。如果網站回傳4xx或5xx回應,或在逾時視窗內沒有回應,我們會回傳清晰的「無法存取」錯誤,而不是猜測。
第2步:偵測平台
在嘗試識別具體佈景主題之前,我們會先檢查網站執行的是哪種CMS。我們尋找7個受支援平台——WordPress、Shopify、Magento、Joomla、Drupal、Moodle和PrestaShop——的指紋特徵,並選擇最強的相符項。
如果你把一個Shopify的URL提交到我們的WordPress偵測器(或反之),我們會告訴你,並連結到正確的偵測器。不猜測,無誤報。
第3步:佈景主題偵測
具體到WordPress,對佈景主題的參照通常出現在頁面HTML中,位於諸如wp-content/themes/主題名稱/style.css這樣的路徑裡。我們會從文件的任何位置擷取每一處這樣的參照:link標籤、script標籤、內嵌JavaScript、JSON-LD區塊,乃至文字內容本身。這能偵測出那些經過高度最佳化、對標準偵測工具隱藏起來的佈景主題。
對於每一個偵測到的佈景主題,我們都會嘗試取得該佈景主題的style.css檔案。該檔案的標頭包含佈景主題的官方名稱、作者、版本、URI和描述,直接來自佈景主題開發者。這正是我們在偵測結果旁展示的豐富佈景主題資訊的來源。
第4步:外掛偵測
外掛偵測使用兩種並行方法。首先,我們擷取任何與wp-content/plugins/外掛名稱/相符的檔案路徑。其次,我們執行數十項基於特徵的檢查:尋找特定的HTML結構、CSS類別名稱、內嵌JavaScript變數以及HTTP回應標頭,這些都能唯一識別Elementor、Yoast SEO、WPForms、WooCommerce、Wordfence等熱門外掛。
這種雙重方法的設計能偵測出那些隱藏其檔案路徑(透過快取或資源打包)但仍留下獨特特徵的外掛。對於每一個偵測到的外掛,我們都會在WordPress.org外掛目錄中查找它,以官方外掛名稱、描述、作者和螢幕擷圖來豐富結果。
第5步:主機託管 + DNS查詢
為了識別主機託管服務商,我們對網域進行DNS查詢,並檢查IP位址、ASN和反向DNS。我們將其與一個已知主機託管服務商IP段的資料庫進行比對,以識別服務商。對於主流主機託管(AWS、Cloudflare、Hostinger、SiteGround等)準確率很高,對小眾服務商則較低。
我們做不到的事
有些情況下,無論我們的程式碼多麼出色,偵測都將無法奏效:
- Cloudflare的機器人挑戰。啟用了嚴格Cloudflare反機器人保護的網站(即「正在進行安全驗證……」的畫面)會像攔截任何自動化請求那樣攔截我們的取得器。沒有乾淨的方法繞過它。
- 深度自訂的佈景主題。如果一款佈景主題被改動到從HTML中移除了對原始佈景主題名稱的每一處參照,我們就沒有任何可供偵測的內容。
- 重寫了資源路徑的積極快取。LiteSpeed Cache、WP Rocket和Cloudflare的Rocket Loader等外掛有時會重寫資源URL以隱藏來源。我們基於特徵的偵測能識別出其中大多數,但並非全部。
- 靜態匯出的網站。一個被匯出為靜態HTML的WordPress網站會遺失使偵測成為可能的大多數執行階段特徵。
我們不做的事
有人問過我們這些。答案都是否定的:
- 我們不儲存你提交的URL
- 我們不出於行銷目的記錄IP位址
- 我們不與服務商分享偵測資料
- 我們不繞過身分驗證、robots.txt或其他存取控制
- 出於安全原因,我們不對內部/私有IP(127.0.0.1、10.x.x.x等)執行偵測器
完整的隱私細節請見我們的隱私政策。
API存取
我們目前不提供公開API,但可應要求為代理機構和研究人員提供有限的程式化存取。請將你的使用情境和預期請求量傳送至hello@revealtheme.com。
為什麼不開源?
偵測規則是產品的核心,我們會隨著佈景主題和外掛的演變而頻繁更新它們。將其開源會拖慢我們的更新節奏。話雖如此,我們會在部落格上發布關於偵測技術的詳細文章:搜尋「detection」即可找到。
準備好試一試了嗎?
使用與你想檢查的網站相符的偵測器: