Il s'agit d'un fork datant du moment où ce dépôt est devenu privé - il y a un projet qui tente de continuer ici et que vous souhaitez probablement à la place
Wappalyzer identifie les technologies sur les sites Web, telles que les CMS, les frameworks Web, les plateformes de commerce électronique, les bibliothèques JavaScript, les outils d'analyse, etc.
git clone https://github.com/wappalyzer/wappalyzer.git
cd wappalyzer
yarn install
about:extensions
src
about:debugging#/runtime/this-firefox
src/manifest.json
Une longue liste d'expressions régulières est utilisée pour identifier les technologies sur les pages Web. Wappalyzer inspecte le code HTML, ainsi que les variables JavaScript, les en-têtes de réponse et bien plus encore.
Les modèles (expressions régulières) sont conservés dans src/technologies/
. Ce qui suit est un exemple d’empreinte digitale d’application.
"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 " ,
}
Recherchez le schéma JSON sur schema.json
.
Champ | Taper | Description | Exemple |
---|---|---|---|
cats | Tableau | Un ou plusieurs identifiants de catégorie. | [1, 6] |
website | Chaîne | URL du site Web de l'application. | "https://example.com" |
Champ | Taper | Description | Exemple |
---|---|---|---|
description | Chaîne | Une brève description de la technologie en anglais britannique (max. 250 caractères). Écrivez sur un ton neutre et factuel ; pas comme une publicité. | "A short description." |
icon | Chaîne | Nom de fichier de l’icône de l’application. | "WordPress.svg" |
cpe | Chaîne | CPE est un système de dénomination structuré pour les technologies. Pour vérifier si un CPE est valide et existe (en utilisant la v2.3), utilisez la recherche). | "cpe:2.3:a:apache:http_server :*:*:*:*:*:*:*:*" |
saas | Booléen | La technologie est proposée sous forme de Software-as-a-Service (SaaS), c'est-à-dire hébergée ou basée sur le cloud. | true |
oss | Booléen | La technologie dispose d'une licence open source. | true |
pricing | Tableau | Indicateur de coût (basé sur un forfait type ou un prix mensuel moyen) et modèles de tarification disponibles. Pour les produits payants uniquement. L'un des :
Plus l'un des :
| ["low", "freemium"] |
Champ | Taper | Description | Exemple |
---|---|---|---|
implies | Chaîne | Tableau | La présence d'une application peut impliquer la présence d'une autre, par exemple WordPress signifie que PHP est également utilisé. | "PHP" |
requires | Chaîne | Tableau | Similaire à implique, mais la détection ne s'exécute que si la technologie requise a été identifiée. Utile pour les thèmes d'un CMS spécifique. | "WordPress" |
requiresCategory | Chaîne | Tableau | Similaire aux exigences ; la détection ne s'exécute que si une technologie dans la catégorie requise a été identifiée. | "Ecommerce" |
excludes | Chaîne | Tableau | Le contraire d'implique. La présence d’une application peut exclure la présence d’une autre. | "Apache" |
Champ | Taper | Description | Exemple |
---|---|---|---|
cookies | Objet | Cookies. | { "cookie_name": "Cookie value" } |
dom | Chaîne | Tableau | Objet | Utilise un sélecteur de requête pour inspecter les propriétés des éléments, les attributs et le contenu du texte. | { "#example-id": { "property": { "example-prop": "" } } } |
dns | Objet | Enregistrements DNS : prend en charge MX, TXT, SOA et NS. | { "MX": "example\.com" } |
js | Objet | Propriétés JavaScript (sensible à la casse). Évitez les noms de propriété courts pour éviter que le code minifié ne corresponde. | { "jQuery.fn.jquery": "" } |
headers | Objet | En-têtes de réponse HTTP. | { "X-Powered-By": "^WordPress$" } |
text | Chaîne | Tableau | Correspond au texte brut. Ne doit être utilisé que dans des cas très spécifiques où d'autres méthodes ne peuvent pas être utilisées. | bexampleb |
css | Chaîne | Tableau | Règles CSS. Indisponible lorsqu'un site Web applique une politique de même origine. Pour des raisons de performances, seule une partie des règles CSS disponibles est utilisée pour rechercher des correspondances. | "\.example-class" |
probe | Objet | Demandez une URL pour tester son existence ou faire correspondre le contenu du texte. | { "/path": "Example text" } |
robots | Chaîne | Tableau | Contenu du fichier Robots.txt. | "Disallow: /unique-path/" |
url | Chaîne | Tableau | URL complète de la page. | "^https?//.+\.wordpress\.com" |
xhr | Chaîne | Tableau | Noms d’hôtes des requêtes XHR. | "cdn\.netlify\.com" |
meta | Objet | Balises méta HTML, par exemple générateur. | { "generator": "^WordPress$" } |
scriptSrc | Chaîne | Tableau | URL des fichiers JavaScript inclus sur la page. | "jquery\.js" |
scripts | Chaîne | Tableau | Code source JavaScript. Inspecte les scripts en ligne et externes. Pour des raisons de performances, évitez scripts dans la mesure du possible et utilisez plutôt js . | "function webpackJsonpCallback\(data\) {" |
html (obsolète) | Chaîne | Tableau | Code source HTML. Les modèles doivent inclure une balise d'ouverture HTML pour éviter de correspondre au texte brut. Pour des raisons de performances, évitez html dans la mesure du possible et utilisez plutôt dom . | "<a [^>]*href="index.html" |
Les modèles sont essentiellement des expressions régulières JavaScript écrites sous forme de chaînes, mais avec quelques ajouts.
\.
). Les guillemets doubles ne doivent être échappés qu'une seule fois ( "
). Les barres obliques n'ont pas besoin d'être échappées ( /
).()
) sont utilisés pour la détection de version. Dans d'autres cas, utilisez des groupes non capturants ( (?:)
).^
et $
) lorsque cela est possible pour des performances optimales. Les balises (une syntaxe non standard) peuvent être ajoutées aux modèles (et impliquent et excluent, séparés par \;
) pour stocker des informations supplémentaires.
Étiqueter | Description | Exemple |
---|---|---|
confidence | Indique un modèle moins fiable pouvant provoquer des faux positifs. L’objectif est d’atteindre une confiance globale de 100 %. La valeur par défaut est 100 % si non spécifié. | "js": { "Mage": "\;confidence:50" } |
version | Obtient le numéro de version à partir d’une correspondance de modèle à l’aide d’une syntaxe spéciale. | "scriptSrc": "jquery-([0-9.]+).js\;version:\1" |
Les informations sur la version de l'application peuvent être obtenues à partir d'un modèle à l'aide d'un groupe de capture. Une condition peut être évaluée à l'aide de l'opérateur ternaire ( ?:
).
Exemple | Description |
---|---|
\1 | Renvoie la première correspondance. |
\1?a: | Renvoie un si la première correspondance contient une valeur, rien sinon. |
\1?a:b | Renvoie a si la première correspondance contient une valeur, b sinon. |
\1?:b | Ne renvoie rien si la première correspondance contient une valeur, b sinon. |
foo\1 | Renvoie foo avec la première correspondance ajoutée. |