هذه شوكة عندما أصبح هذا الريبو خاصًا - هناك مشروع يحاول الاستمرار هنا وربما تريده بدلاً من ذلك
يحدد 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 | هدف | خصائص جافا سكريبت (حساسة لحالة الأحرف). تجنب أسماء الخصائص القصيرة لمنع مطابقة التعليمات البرمجية المصغرة. | { "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 | سلسلة | صفيف | كود مصدر جافا سكريبت. يتفقد البرامج النصية المضمنة والخارجية. لأسباب تتعلق بالأداء، تجنب 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: | تُرجع قيمة إذا كانت المطابقة الأولى تحتوي على قيمة، ولا شيء غير ذلك. |
\1?a:b | يتم إرجاع a إذا كانت المطابقة الأولى تحتوي على قيمة، وإرجاع b بخلاف ذلك. |
\1?:b | لا يُرجع أي شيء إذا كانت المطابقة الأولى تحتوي على قيمة، وإلا b. |
foo\1 | يُرجع foo مع إلحاق المباراة الأولى. |