
☸أول أداة اختبار لواجهة برمجة تطبيقات GraphQL تراعي التبعيات على الإطلاق!
أداة اختبار GraphQL API الوحيدة التي تراعي التبعيات!
GraphQLer هي أداة متطورة مصممة لاختبار واجهات برمجة تطبيقات GraphQL بشكل ديناميكي مع التركيز على القدرة على التكيف. تقدم مجموعة من الميزات المتطورة التي تبسط عملية الاختبار وتضمن تحليلاً قوياً لواجهات GraphQL. تدير GraphQLer الكائنات والموارد التي تم إنشاؤها بكفاءة، وتحدد التبعيات على الكائنات والاستعلامات والطفرات (queries and mutations) بشكل فعال، وتصحح الأخطاء ديناميكياً داخل الاستعلامات بناءً على قيود واجهة API. تم استخدام GraphQLer لاكتشاف العديد من الأخطاء في واجهات GraphQL API ذات المستوى الإنتاجي!

للبدء في استخدام GraphQLer، اطلع على دليل التثبيت.
❯ python3 main.py --help
usage: main.py [-h] [--compile] [--fuzz] [--run] --path PATH [--auth AUTH] --url URL
options:
-h, --help show this help message and exit
--compile runs on compile mode
--fuzz runs on fuzzing mode
--run run both the compiler and fuzzer (equivalent of running --compile then running --fuzz)
--path PATH directory location for saved files and files to be used from
--auth AUTH authentication token Example: 'Bearer arandompat-abcdefgh'
--url URL remote host URL
فيما يلي خطوات استخدام هذا البرنامج لاختبار واجهة GraphQL API الخاصة بك. ينقسم الاستخدام إلى مرحلتين: التجميع (compilation) و الفحص العشوائي (fuzzing).
يتضمن البرنامج وضعاً ثالثاً لتسهيل الاستخدام يُسمى وضع التشغيل (run). هذا الوضع يجمع مرحلتي التجميع والفحص العشوائي في أمر واحد.
(.env) python main.py --compile --url <URL> --path <SAVE_PATH>
بعد التجميع، يمكنك عرض النتائج المجمعة في <SAVE_PATH>/compiled. بالإضافة إلى ذلك، سيتم إنشاء رسم بياني يسمى dependency_graph.png للفحص. يمكن وضع علامة يدويًا على أي UNKNOWNS في ملفات .yaml المجمعة؛ ومع ذلك، إذا لم يتم وضع علامة، فسيظل برنامج الفحص العشوائي يشغلها ولكن دون استخدام سلسلة تبعية.
(.env) python main.py --fuzz --url <URL> --path <SAVE_PATH>
أثناء الفحص العشوائي، يتم تسجيل الإحصائيات المتعلقة بواجهة GraphQL API وأي عدد من الطلبات الجارية في وحدة التحكم. يتم كتابة أي رموز إرجاع للطلبات إلى <SAVE_PATH>/stats.txt. يتم الاحتفاظ بجميع السجلات أثناء الفحص العشوائي في <SAVE_PATH>/logs/fuzzer.log. سيخبرك ملف السجل بالضبط بالطلبات التي تم إرسالها إلى أي نقاط نهاية (endpoints)، وما كانت الاستجابة. يمكن استخدام هذا لتحليل النتائج بشكل أكبر.
يشغل كلاً من وضع التجميع ووضع الفحص العشوائي
(.env) python main.py --run --url <URL> --path <SAVE_PATH>
هناك أيضًا متغيرات يمكن تعديلها في ملف constants.py. تتوافق هذه المتغيرات مع ميزات محددة تم تنفيذها في GraphQLer، ويمكن ضبطها حسب رغبتك.
| اسم المتغير | وصف المتغير | نوع المتغير | الافتراضي |
|---|
| MAX_LEVENSHTEIN_THRESHOLD | مسافة ليفينشتاين بين الكائنات ومعرفات الكائنات | عدد صحيح | 20 |
| MAX_OBJECT_CYCLES | أقصى عدد مرات يمكن فيها إظهار نفس الكائن في نفس الاستعلام/الطفرة | عدد صحيح | 3 |
| MAX_OUTUPT_SELECTOR_DEPTH | أقصى عمق يمكن توسيع ناتج الاستعلام/الطفرة (مثل حالة المحددات العودية اللانهائية) | عدد صحيح | 3 |
| USE_OBJECTS_BUCKET | ما إذا كان سيتم تخزين معرفات الكائنات للاستخدام المستقبلي أم لا | منطقي | True |
| USE_DEPENDENCY_GRAPH | ما إذا كان سيتم استخدام ميزة مراعاة التبعيات أم لا | منطقي | True |
| MAX_FUZZING_ITERATIONS | أقصى عدد من حمولات الفحص العشوائي لتشغيلها على عقدة | عدد صحيح | 5 |
| MAX_TIME | أقصى وقت للتشغيل | عدد صحيح | 3600 |