自訂規則
自訂規則用於補充內建規則未覆蓋到的站點,或在本地先驗證一條新規則是否可靠。
表單填寫
| 欄位 | 必填 | 說明 |
|---|---|---|
| 技術名稱 | 是 | 彈窗裡顯示的名稱,比如 MyCMS |
| 分類 | 選一個內建分類(23 個)或自己輸入新分類。預設「其他程式庫」。Select 元件支援自由輸入,分類清單裡沒有的也能寫。 | |
| 類型說明 | 給自己看的備註,比如 企業 CMS、第三方支付。會顯示在 evidence 前綴,可以為空。 | |
| 可信度 | 高 / 中 / 低,預設「中」 | |
| 比對方式 | 關鍵字 / 正規表達式,預設「正規表達式」 | |
| 官網 / 儲存庫 URL | 必須 http:// 或 https://。填了之後彈窗裡技術名稱可點擊跳轉 |
下方還有四個區域:
比對範圍:決定下面的 patterns / selectors / globals 去哪些資料來源裡比對
- 頁面 URL:當前網頁網址
- 資源 URL:腳本 / 樣式 / iframe 載入的資源
- DOM / 原始碼:頁面 outerHTML
- 回應標頭:主文件 + API + iframe 的回應標頭
- 動態資源:MutationObserver 持續累積的資源
比對規則(patterns):一行一條。關鍵字模式下是字面字串包含;正規表達式模式下是 JS 正規表達式來源(不帶
/.../i包裹,i 旗標由擴充功能自動加)CSS 選擇器(selectors):一行一個 selector,比如
[data-v-app]、#__next。比對範圍必須包含「DOM / 原始碼」全域變數(globals):一行一個,比如
React、Vue.config、__NEXT_DATA__。命中即高可信度
新增 / 更新
- 新增規則(綠色主按鈕):把當前表單存為新規則
- 更新目前規則:先在右下角清單點編輯某條規則進入「編輯模式」,改完按這個儲存
最後需要點頁面右上角「儲存設定」,規則才會寫入 storage。
已新增規則清單
顯示在頁面底部,每條帶:
- 標題:規則的技術名稱
- 元資訊:分類 · 類型 · 可信度 · 比對方式 · N 條 patterns
- 操作:「編輯」「刪除」兩個按鈕(刪除按鈕 hover 變紅)
驗證規則
每次新增 / 更新 / 儲存設定時,會做以下驗證:
- 必須有名稱
- patterns / selectors / globals 至少填一個
- 比對範圍至少勾一項
- url 欄位如填則必須 http(s)😕/
- patterns(正規表達式模式下)每條都要能
new RegExp通過 - selectors 每條都要能
document.createDocumentFragment().querySelector通過 - globals 每條都要符合
MyCMS或google.maps這種點分隔變數名稱
驗證失敗會浮出紅色提示氣泡,列出最多 6 條問題。
範例:簡單關鍵字
識別 ExampleCMS:
text
技術名稱: ExampleCMS
分類: 網站程式
比對方式: 關鍵字
比對規則:
examplecms
X-Generator: ExampleCMS
比對範圍: [x] 頁面 URL [x] 資源 URL [x] DOM / 原始碼 [x] 回應標頭範例:識別 WordPress 佈景主題
text
技術名稱: WordPress 佈景主題: oceanwp
分類: 佈景主題 / 模板
比對方式: 關鍵字
比對規則:
/wp-content/themes/oceanwp/
比對範圍: [x] 資源 URL [x] DOM / 原始碼範例:識別動態載入的支付 SDK
支付按鈕點了之後才會請求腳本,所以勾「動態資源」:
text
技術名稱: ExamplePay
分類: 支付系統
類型說明: 第三方支付
比對方式: 關鍵字
比對規則:
pay.example.com
examplepay-sdk
比對範圍: [x] 動態資源範例:用正規表達式識別帶版本號的程式庫檔案
text
技術名稱: ExampleLib
分類: 前端程式庫
比對方式: 正規表達式
比對規則:
examplelib-[0-9.]+\.min\.js
比對範圍: [x] 資源 URL [x] 動態資源降低誤報
- 別用太通用的關鍵字,比如
appmainlogin,幾乎所有網站都有 - 優先寫完整網域名稱
pay.example.com而不是pay - 優先寫特殊路徑
/wp-content/themes/oceanwp/而不是oceanwp - 不確定就把可信度設成「低」,彈窗裡會顯示灰色標籤提示這只是猜測
- 儲存規則後一定要重新整理目標網頁再開啟彈窗看效果,否則快取還是舊的