Esta es una bifurcación de cuando este repositorio se volvió privado: hay un proyecto que está intentando continuar aquí y que probablemente quieras en su lugar.
Wappalyzer identifica tecnologías en sitios web, como CMS, marcos web, plataformas de comercio electrónico, bibliotecas de JavaScript, herramientas de análisis y más.
git clone https://github.com/wappalyzer/wappalyzer.git
cd wappalyzer
yarn install
about:extensions
src
about:debugging#/runtime/this-firefox
src/manifest.json
Se utiliza una larga lista de expresiones regulares para identificar tecnologías en páginas web. Wappalyzer inspecciona el código HTML, así como las variables de JavaScript, los encabezados de respuesta y más.
Los patrones (expresiones regulares) se mantienen en src/technologies/
. El siguiente es un ejemplo de una huella digital de aplicación.
"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 " ,
}
Busque el esquema JSON en schema.json
.
Campo | Tipo | Descripción | Ejemplo |
---|---|---|---|
cats | Formación | Uno o más ID de categoría. | [1, 6] |
website | Cadena | URL del sitio web de la aplicación. | "https://example.com" |
Campo | Tipo | Descripción | Ejemplo |
---|---|---|---|
description | Cadena | Una breve descripción de la tecnología en inglés británico (máximo 250 caracteres). Escriba en un tono neutral y objetivo; No como un anuncio. | "A short description." |
icon | Cadena | Nombre de archivo del icono de la aplicación. | "WordPress.svg" |
cpe | Cadena | CPE es un esquema de nomenclatura estructurado para tecnologías. Para comprobar si un CPE es válido y existe (usando v2.3), utilice la búsqueda). | "cpe:2.3:a:apache:http_server :*:*:*:*:*:*:*:*" |
saas | booleano | La tecnología se ofrece como software como servicio (SaaS), es decir, alojada o basada en la nube. | true |
oss | booleano | La tecnología tiene una licencia de código abierto. | true |
pricing | Formación | Indicador de costo (basado en un plan típico o precio mensual promedio) y modelos de precios disponibles. Solo para productos pagos. Uno de:
Además cualquiera de:
| ["low", "freemium"] |
Campo | Tipo | Descripción | Ejemplo |
---|---|---|---|
implies | Cadena | Formación | La presencia de una aplicación puede implicar la presencia de otra; por ejemplo, WordPress significa que PHP también está en uso. | "PHP" |
requires | Cadena | Formación | Similar a implica, pero la detección solo se ejecuta si se ha identificado la tecnología requerida. Útil para temas de un CMS específico. | "WordPress" |
requiresCategory | Cadena | Formación | Similar a los requisitos; la detección solo se ejecuta si se ha identificado una tecnología en la categoría requerida. | "Ecommerce" |
excludes | Cadena | Formación | Lo contrario de implica. La presencia de una aplicación puede excluir la presencia de otra. | "Apache" |
Campo | Tipo | Descripción | Ejemplo |
---|---|---|---|
cookies | Objeto | Galletas. | { "cookie_name": "Cookie value" } |
dom | Cadena | Matriz | Objeto | Utiliza un selector de consultas para inspeccionar propiedades de elementos, atributos y contenido de texto. | { "#example-id": { "property": { "example-prop": "" } } } |
dns | Objeto | Registros DNS: soporta MX, TXT, SOA y NS. | { "MX": "example\.com" } |
js | Objeto | Propiedades de JavaScript (distingue entre mayúsculas y minúsculas). Evite nombres de propiedad cortos para evitar coincidencias con código minimizado. | { "jQuery.fn.jquery": "" } |
headers | Objeto | Encabezados de respuesta HTTP. | { "X-Powered-By": "^WordPress$" } |
text | Cadena | Formación | Coincide con texto sin formato. Sólo debe usarse en casos muy específicos donde no se pueden usar otros métodos. | bexampleb |
css | Cadena | Formación | Reglas CSS. No disponible cuando un sitio web aplica una política del mismo origen. Por motivos de rendimiento, solo se utiliza una parte de las reglas CSS disponibles para buscar coincidencias. | "\.example-class" |
probe | Objeto | Solicite una URL para probar su existencia o hacer coincidir el contenido del texto. | { "/path": "Example text" } |
robots | Cadena | Formación | Contenidos de robots.txt. | "Disallow: /unique-path/" |
url | Cadena | Formación | URL completa de la página. | "^https?//.+\.wordpress\.com" |
xhr | Cadena | Formación | Nombres de host de solicitudes XHR. | "cdn\.netlify\.com" |
meta | Objeto | Metaetiquetas HTML, por ejemplo, generador. | { "generator": "^WordPress$" } |
scriptSrc | Cadena | Formación | URL de archivos JavaScript incluidos en la página. | "jquery\.js" |
scripts | Cadena | Formación | Código fuente JavaScript. Inspecciona scripts en línea y externos. Por motivos de rendimiento, evite scripts siempre que sea posible y utilice js en su lugar. | "function webpackJsonpCallback\(data\) {" |
html (en desuso) | Cadena | Formación | Código fuente HTML. Los patrones deben incluir una etiqueta de apertura HTML para evitar que coincida con texto sin formato. Por motivos de rendimiento, evite html siempre que sea posible y utilice dom en su lugar. | "<a [^>]*href="index.html" |
Los patrones son esencialmente expresiones regulares de JavaScript escritas como cadenas, pero con algunas adiciones.
\.
). Las comillas dobles deben tener caracteres de escape solo una vez ( "
). No es necesario utilizar caracteres de escape para las barras diagonales ( /
).()
) se utilizan para la detección de versiones. En otros casos, utilice grupos que no capturen ( (?:)
).^
y $
) cuando sea posible para un rendimiento óptimo. Se pueden agregar etiquetas (una sintaxis no estándar) a los patrones (e implica y excluye, separados por \;
) para almacenar información adicional.
Etiqueta | Descripción | Ejemplo |
---|---|---|
confidence | Indica un patrón menos confiable que puede causar falsos positivos. El objetivo es alcanzar una confianza combinada del 100%. El valor predeterminado es 100% si no se especifica. | "js": { "Mage": "\;confidence:50" } |
version | Obtiene el número de versión de una coincidencia de patrón mediante una sintaxis especial. | "scriptSrc": "jquery-([0-9.]+).js\;version:\1" |
La información de la versión de la aplicación se puede obtener a partir de un patrón utilizando un grupo de captura. Una condición se puede evaluar utilizando el operador ternario ( ?:
:).
Ejemplo | Descripción |
---|---|
\1 | Devuelve el primer partido. |
\1?a: | Devuelve a si la primera coincidencia contiene un valor, nada en caso contrario. |
\1?a:b | Devuelve a si la primera coincidencia contiene un valor, b en caso contrario. |
\1?:b | No devuelve nada si la primera coincidencia contiene un valor; b en caso contrario. |
foo\1 | Devuelve foo con la primera coincidencia adjunta. |