นี่เป็นทางแยกจากเมื่อ repo นี้กลายเป็นแบบส่วนตัว - มีโปรเจ็กต์ที่พยายามดำเนินการต่อที่นี่ซึ่งคุณอาจต้องการแทน
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 | บูลีน | เทคโนโลยีนี้นำเสนอในรูปแบบ Software-as-a-Service (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 ที่มีอยู่เพียงบางส่วนเท่านั้นเพื่อค้นหารายการที่ตรงกัน | "\.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 | สตริง | อาร์เรย์ | ซอร์สโค้ดจาวาสคริปต์ ตรวจสอบสคริปต์อินไลน์และภายนอก เพื่อเหตุผลด้านประสิทธิภาพ ให้หลีกเลี่ยง 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 โดยมีการจับคู่คู่แรกต่อท้าย |