wappalyzer
1.0.0
這是此存儲庫私有化時的一個分叉 - 有一個項目正在嘗試在這裡繼續,而您可能想要
Wappalyzer 識別網站上的技術,例如 CMS、Web 框架、電子商務平台、JavaScript 程式庫、分析工具等。
git clone https://github.com/wappalyzer/wappalyzer.git
cd wappalyzer
yarn install
about:extensions
src
about:debugging#/runtime/this-firefox
src/manifest.json
一長串正規表示式用於識別網頁上的技術。 Wappalyzer 檢查 HTML 程式碼以及 JavaScript 變數、回應標頭等。
模式(正規表示式)保存在src/technologies/
中。以下是應用程式指紋的範例。
"Example" : {
"description" : " A short description of the technology. " ,
"cats" : [
" 1 "
],
"cookies" : {
"cookie_name" : " Example "
},
"dom" : {
"#example-id" : {
"exists" : " " ,
"attributes" : {
"class" : " example-class "
},
"properties" : {
"example-property" : " "
},
"text" : " Example text content "
}
},
"dns" : {
"MX" : [
" example \ .com "
]
},
"js" : {
"Example.method" : " "
},
"excludes" : " Example " ,
"headers" : {
"X-Powered-By" : " Example "
},
"text" : " b example b " ,
"css" : " \ .example-class " ,
"robots" : " Disallow: /unique-path/ " ,
"implies" : " PHP \ ;confidence:50 " ,
"requires" : " WordPress " ,
"requiresCategory" : " Ecommerce " ,
"meta" : {
"generator" : " (?:Example|Another Example) "
},
"probe" : {
"/path" : " "
},
"scriptSrc" : " example-([0-9.]+) \ .js \ ;confidence:50 \ ;version: \ 1 " ,
"scripts" : " function webpackJsonpCallback \ (data \ ) { " ,
"url" : " example \ .com " ,
"xhr" : " example \ .com " ,
"oss" : true ,
"saas" : true ,
"pricing" : [ " mid " , " freemium " , " recurring " ],
"website" : " https://example.com " ,
}
在schema.json
中找到 JSON 架構。
場地 | 類型 | 描述 | 例子 |
---|---|---|---|
cats | 大批 | 一個或多個類別 ID。 | [1, 6] |
website | 細繩 | 應用程式網站的 URL。 | "https://example.com" |
場地 | 類型 | 描述 | 例子 |
---|---|---|---|
description | 細繩 | 用英式英語對該技術進行簡短描述(最多 250 個字元)。以中立、真實的語氣寫作;不像廣告。 | "A short description." |
icon | 細繩 | 應用程式圖示檔案名稱。 | "WordPress.svg" |
cpe | 細繩 | CPE 是一種結構化的技術命名方案。若要檢查 CPE 是否有效且存在(使用 v2.3),請使用搜尋)。 | "cpe:2.3:a:apache:http_server :*:*:*:*:*:*:*:*" |
saas | 布林值 | 該技術以軟體即服務(SaaS)的形式提供,即託管或基於雲端。 | true |
oss | 布林值 | 該技術擁有開源許可證。 | true |
pricing | 大批 | 成本指標(基於典型計劃或平均每月價格)和可用的定價模型。僅適用於付費產品。 之一:
再加上以下任一項:
| ["low", "freemium"] |
場地 | 類型 | 描述 | 例子 |
---|---|---|---|
implies | 字串|大批 | 一個應用程式的存在可能意味著另一個應用程式的存在,例如 WordPress 意味著 PHP 也在使用。 | "PHP" |
requires | 字串|大批 | 與暗示類似,但檢測僅在已識別所需技術的情況下運行。對於特定 CMS 的主題很有用。 | "WordPress" |
requiresCategory | 字串|大批 | 與要求類似;只有當已識別出所需類別中的技術時,才會執行檢測。 | "Ecommerce" |
excludes | 字串|大批 | 與暗示相反。一個應用程式的存在可以排除另一個應用程式的存在。 | "Apache" |
場地 | 類型 | 描述 | 例子 |
---|---|---|---|
cookies | 目的 | 餅乾. | { "cookie_name": "Cookie value" } |
dom | 字串|數組 |目的 | 使用查詢選擇器檢查元素屬性、屬性和文字內容。 | { "#example-id": { "property": { "example-prop": "" } } } |
dns | 目的 | DNS記錄:支援MX、TXT、SOA和NS。 | { "MX": "example\.com" } |
js | 目的 | JavaScript 屬性(區分大小寫)。避免使用短屬性名稱,以防止匹配縮小的程式碼。 | { "jQuery.fn.jquery": "" } |
headers | 目的 | HTTP 回應標頭。 | { "X-Powered-By": "^WordPress$" } |
text | 字串|大批 | 匹配純文字。僅應在無法使用其他方法的非常特殊的情況下使用。 | bexampleb |
css | 字串|大批 | CSS 規則。當網站強制執行同源策略時不可用。出於效能原因,僅使用部分可用 CSS 規則來尋找匹配項。 | "\.example-class" |
probe | 目的 | 請求 URL 以測試其存在或符合文字內容。 | { "/path": "Example text" } |
robots | 字串|大批 | Robots.txt 內容。 | "Disallow: /unique-path/" |
url | 字串|大批 | 頁面的完整 URL。 | "^https?//.+\.wordpress\.com" |
xhr | 字串|大批 | XHR 請求的主機名稱。 | "cdn\.netlify\.com" |
meta | 目的 | HTML 元標記,例如生成器。 | { "generator": "^WordPress$" } |
scriptSrc | 字串|大批 | 頁面中包含的 JavaScript 檔案的 URL。 | "jquery\.js" |
scripts | 字串|大批 | JavaScript 原始碼。檢查內聯和外部腳本。出於效能原因,請盡可能避免使用scripts 並使用js 。 | "function webpackJsonpCallback\(data\) {" |
html (已棄用) | 字串|大批 | HTML 原始碼。模式必須包含 HTML 開始標記以避免符合純文字。出於性能原因,請盡可能避免使用html 並使用dom 。 | "<a [^>]*href="index.html" |
模式本質上是寫為字串的 JavaScript 正規表示式,但也添加了一些內容。
\.
) 等特殊字元時,必須對轉義字元本身進行轉義。雙引號只能轉義一次 ( "
)。斜線不需要轉義 ( /
)。()
) 用於版本檢測。在其他情況下,請使用非捕獲組 ( (?:)
)。^
和$
)以獲得最佳效能。標籤(非標準語法)可以附加到模式(並暗示和排除,用\;
分隔)以儲存附加資訊。
標籤 | 描述 | 例子 |
---|---|---|
confidence | 指示不太可靠的模式,可能會導致誤報。目標是實現 100% 的綜合置信度。如果未指定,則預設為 100%。 | "js": { "Mage": "\;confidence:50" } |
version | 使用特殊語法從模式比對中取得版本號。 | "scriptSrc": "jquery-([0-9.]+).js\;version:\1" |
可以使用捕獲組從模式中獲取應用程式版本資訊。可以使用三元運算子 ( ?:
:) 來評估條件。
例子 | 描述 |
---|---|
\1 | 傳回第一個匹配項。 |
\1?a: | 如果第一個符合項包含值,則傳回 a,否則不回傳。 |
\1?a:b | 如果第一個符合項包含值,則傳回 a,否則傳回 b。 |
\1?:b | 如果第一個符合項目包含值,則不傳回任何內容,否則傳回 b。 |
foo\1 | 傳回 foo 並附加第一個符合項。 |