Esta é uma bifurcação de quando este repositório se tornou privado - há um projeto que está tentando continuar aqui e que você provavelmente deseja
Wappalyzer identifica tecnologias em sites, como CMS, estruturas web, plataformas de comércio eletrônico, bibliotecas JavaScript, ferramentas analíticas e muito mais.
git clone https://github.com/wappalyzer/wappalyzer.git
cd wappalyzer
yarn install
about:extensions
src
about:debugging#/runtime/this-firefox
src/manifest.json
Uma longa lista de expressões regulares é usada para identificar tecnologias em páginas web. Wappalyzer inspeciona código HTML, bem como variáveis JavaScript, cabeçalhos de resposta e muito mais.
Padrões (expressões regulares) são mantidos em src/technologies/
. A seguir está um exemplo de impressão digital de aplicativo.
"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 " ,
}
Encontre o esquema JSON em schema.json
.
Campo | Tipo | Descrição | Exemplo |
---|---|---|---|
cats | Variedade | Um ou mais IDs de categoria. | [1, 6] |
website | Corda | URL do site do aplicativo. | "https://example.com" |
Campo | Tipo | Descrição | Exemplo |
---|---|---|---|
description | Corda | Uma breve descrição da tecnologia em inglês britânico (máx. 250 caracteres). Escreva em tom neutro e factual; não como um anúncio. | "A short description." |
icon | Corda | Nome do arquivo do ícone do aplicativo. | "WordPress.svg" |
cpe | Corda | CPE é um esquema de nomenclatura estruturado para tecnologias. Para verificar se um CPE é válido e existe (usando v2.3), use a busca). | "cpe:2.3:a:apache:http_server :*:*:*:*:*:*:*:*" |
saas | Booleano | A tecnologia é oferecida como software como serviço (SaaS), ou seja, hospedado ou baseado em nuvem. | true |
oss | Booleano | A tecnologia possui licença de código aberto. | true |
pricing | Variedade | Indicador de custo (baseado em um plano típico ou preço médio mensal) e modelos de precificação disponíveis. Apenas para produtos pagos. Um de:
Além de qualquer um de:
| ["low", "freemium"] |
Campo | Tipo | Descrição | Exemplo |
---|---|---|---|
implies | Corda | Variedade | A presença de uma aplicação pode implicar a presença de outra, por exemplo, WordPress significa que PHP também está em uso. | "PHP" |
requires | Corda | Variedade | Semelhante a implica, mas a detecção só é executada se a tecnologia necessária tiver sido identificada. Útil para temas de um CMS específico. | "WordPress" |
requiresCategory | Corda | Variedade | Semelhante a requer; a detecção só é executada se uma tecnologia na categoria exigida tiver sido identificada. | "Ecommerce" |
excludes | Corda | Variedade | Oposto de implica. A presença de um aplicativo pode excluir a presença de outro. | "Apache" |
Campo | Tipo | Descrição | Exemplo |
---|---|---|---|
cookies | Objeto | Biscoitos. | { "cookie_name": "Cookie value" } |
dom | Corda | Matriz | Objeto | Usa um seletor de consulta para inspecionar propriedades de elementos, atributos e conteúdo de texto. | { "#example-id": { "property": { "example-prop": "" } } } |
dns | Objeto | Registros DNS: suporta MX, TXT, SOA e NS. | { "MX": "example\.com" } |
js | Objeto | Propriedades JavaScript (diferencia maiúsculas de minúsculas). Evite nomes de propriedades curtos para evitar correspondência de código minificado. | { "jQuery.fn.jquery": "" } |
headers | Objeto | Cabeçalhos de resposta HTTP. | { "X-Powered-By": "^WordPress$" } |
text | Corda | Variedade | Corresponde ao texto simples. Só deve ser utilizado em casos muito específicos onde outros métodos não possam ser utilizados. | bexampleb |
css | Corda | Variedade | Regras CSS. Indisponível quando um site impõe uma política de mesma origem. Por motivos de desempenho, apenas uma parte das regras CSS disponíveis é usada para localizar correspondências. | "\.example-class" |
probe | Objeto | Solicite um URL para testar sua existência ou corresponder ao conteúdo do texto. | { "/path": "Example text" } |
robots | Corda | Variedade | Conteúdo do Robots.txt. | "Disallow: /unique-path/" |
url | Corda | Variedade | URL completo da página. | "^https?//.+\.wordpress\.com" |
xhr | Corda | Variedade | Nomes de host de solicitações XHR. | "cdn\.netlify\.com" |
meta | Objeto | Meta tags HTML, por exemplo, gerador. | { "generator": "^WordPress$" } |
scriptSrc | Corda | Variedade | URLs de arquivos JavaScript incluídos na página. | "jquery\.js" |
scripts | Corda | Variedade | Código-fonte JavaScript. Inspeciona scripts embutidos e externos. Por motivos de desempenho, evite scripts sempre que possível e use js . | "function webpackJsonpCallback\(data\) {" |
html (obsoleto) | Corda | Variedade | Código-fonte HTML. Os padrões devem incluir uma tag de abertura HTML para evitar correspondência com texto simples. Por razões de desempenho, evite html sempre que possível e use dom . | "<a [^>]*href="index.html" |
Os padrões são essencialmente expressões regulares JavaScript escritas como strings, mas com algumas adições.
\.
). As aspas duplas devem ser escapadas apenas uma vez ( "
). As barras não precisam ser escapadas ( /
).()
) são usados para detecção de versão. Em outros casos, use grupos sem captura ( (?:)
).^
e $
) sempre que possível para obter o desempenho ideal. Tags (uma sintaxe não padrão) podem ser anexadas a padrões (e implicam e excluem, separadas por \;
) para armazenar informações adicionais.
Marcação | Descrição | Exemplo |
---|---|---|
confidence | Indica um padrão menos confiável que pode causar falsos positivos. O objetivo é alcançar uma confiança combinada de 100%. O padrão é 100% se não for especificado. | "js": { "Mage": "\;confidence:50" } |
version | Obtém o número da versão de uma correspondência de padrão usando uma sintaxe especial. | "scriptSrc": "jquery-([0-9.]+).js\;version:\1" |
As informações de versão do aplicativo podem ser obtidas de um padrão usando um grupo de captura. Uma condição pode ser avaliada usando o operador ternário ( ?:
).
Exemplo | Descrição |
---|---|
\1 | Retorna a primeira partida. |
\1?a: | Retornará a se a primeira correspondência contiver um valor, nada caso contrário. |
\1?a:b | Retorna a se a primeira correspondência contiver um valor, b caso contrário. |
\1?:b | Não retorna nada se a primeira correspondência contiver um valor, b caso contrário. |
foo\1 | Retorna foo com a primeira correspondência anexada. |