wappalyzer
1.0.0
これは、このリポジトリが非公開になったときのフォークです。ここで続行しようとしているプロジェクトがあり、おそらく代わりに必要になります。
Wappalyzer は、CMS、Web フレームワーク、e コマース プラットフォーム、JavaScript ライブラリ、分析ツールなど、Web サイト上のテクノロジーを識別します。
git clone https://github.com/wappalyzer/wappalyzer.git
cd wappalyzer
yarn install
about:extensions
に移動します。src
選択about:debugging#/runtime/this-firefox
に移動しますsrc/manifest.json
を選択しますWeb ページ上のテクノロジーを識別するために、正規表現の長いリストが使用されます。 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 | 配列 | 1 つ以上のカテゴリ ID。 | [1, 6] |
website | 弦 | アプリケーションの Web サイトの 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 | ブール値 | このテクノロジーは、Software-as-a-Service (SaaS)、つまりホスト型またはクラウドベースとして提供されます。 | true |
oss | ブール値 | このテクノロジーにはオープンソース ライセンスが適用されます。 | true |
pricing | 配列 | コスト指標 (一般的なプランまたは平均月額料金に基づく) と利用可能な価格モデル。有料商品のみ対象となります。 次のいずれか:
さらに次のいずれか:
| ["low", "freemium"] |
分野 | タイプ | 説明 | 例 |
---|---|---|---|
implies | 文字列 |配列 | あるアプリケーションの存在は、別のアプリケーションの存在を暗示することがあります。たとえば、WordPress は PHP も使用されていることを意味します。 | "PHP" |
requires | 文字列 |配列 | 暗黙的に似ていますが、検出は必要なテクノロジーが特定された場合にのみ実行されます。特定の CMS のテーマに役立ちます。 | "WordPress" |
requiresCategory | 文字列 |配列 | 要件に似ています。検出は、必要なカテゴリのテクノロジーが識別された場合にのみ実行されます。 | "Ecommerce" |
excludes | 文字列 |配列 | 暗黙の反対。 1 つのアプリケーションの存在によって、別のアプリケーションの存在が排除される場合があります。 | "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 ルール。 Web サイトが同一生成元ポリシーを強制している場合は使用できません。パフォーマンス上の理由から、一致の検索には使用可能な CSS ルールの一部のみが使用されます。 | "\.example-class" |
probe | 物体 | URL の存在をテストするか、テキスト コンテンツと一致するかをテストするために 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 正規表現ですが、いくつかの追加が加えられています。
\.
) などの特殊文字を使用する場合は、エスケープ文字自体をエスケープする必要があります。二重引用符は 1 回だけエスケープする必要があります ( "
)。スラッシュはエスケープする必要はありません ( /
)。()
) はバージョン検出に使用されます。それ以外の場合は、非キャプチャ グループ ( (?:)
) を使用します。^
と$
) を使用します。タグ (非標準構文) をパターン ( \;
で区切った暗黙と除外) に追加して、追加情報を格納できます。
タグ | 説明 | 例 |
---|---|---|
confidence | 誤検知を引き起こす可能性がある信頼性の低いパターンを示します。目標は、総合信頼度 100% を達成することです。指定しない場合、デフォルトは 100% です。 | "js": { "Mage": "\;confidence:50" } |
version | 特別な構文を使用してパターン一致からバージョン番号を取得します。 | "scriptSrc": "jquery-([0-9.]+).js\;version:\1" |
アプリケーションのバージョン情報は、キャプチャ グループを使用してパターンから取得できます。条件は三項演算子 ( ?:
) を使用して評価できます。
例 | 説明 |
---|---|
\1 | 最初に一致したものを返します。 |
\1?a: | 最初の一致に値が含まれている場合は を返し、それ以外の場合は何も返しません。 |
\1?a:b | 最初の一致に値が含まれている場合は a を返し、そうでない場合は b を返します。 |
\1?:b | 最初の一致に値が含まれている場合は何も返しません。それ以外の場合は b を返します。 |
foo\1 | 最初に一致したものを追加して foo を返します。 |