Это форк с того момента, когда этот репозиторий стал частным — здесь пытается продолжиться проект, который вы, вероятно, захотите вместо этого.
Wappalyzer идентифицирует технологии на веб-сайтах, такие как CMS, веб-фреймворки, платформы электронной коммерции, библиотеки 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 " ,
}
Найдите схему JSON по адресу schema.json
.
Поле | Тип | Описание | Пример |
---|---|---|---|
cats | Множество | Один или несколько идентификаторов категорий. | [1, 6] |
website | Нить | URL-адрес веб-сайта приложения. | "https://example.com" |
Поле | Тип | Описание | Пример |
---|---|---|---|
description | Нить | Краткое описание технологии на британском английском (максимум 250 символов). Пишите нейтральным, основанным на фактах тоном; не похоже на рекламу. | "A short description." |
icon | Нить | Имя файла значка приложения. | "WordPress.svg" |
cpe | Нить | CPE — это структурированная схема именования технологий. Чтобы проверить, действителен и существует ли CPE (с использованием версии 2.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 | Строка | Множество | URL-адреса файлов JavaScript, включенных на страницу. | "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 с добавленным первым совпадением. |