wappalyzer
1.0.0
이것은 이 저장소가 비공개로 전환되었을 때의 포크입니다. 여기서 계속하려는 프로젝트가 있는데 아마도 대신하고 싶을 것입니다.
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 " ,
}
schema.json
에서 JSON 스키마를 찾으세요.
필드 | 유형 | 설명 | 예 |
---|---|---|---|
cats | 정렬 | 하나 이상의 카테고리 ID. | [1, 6] |
website | 끈 | 애플리케이션 웹사이트의 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 | 부울 | 이 기술은 SaaS(Software-as-a-Service), 즉 호스팅 또는 클라우드 기반으로 제공됩니다. | 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 | 문자열 | 정렬 | 페이지에 포함된 JavaScript 파일의 URL입니다. | "jquery\.js" |
scripts | 문자열 | 정렬 | 자바스크립트 소스 코드. 인라인 및 외부 스크립트를 검사합니다. 성능상의 이유로 가능하면 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를 반환합니다. |