تخطَّ إلى المحتوى

التطبيقات

نظرة عامة على التطبيقات

Section titled “نظرة عامة على التطبيقات”

يعمل كل تطبيق على شكل 4 حاويات Docker موزعة بموازنة التحميل خلف مجموعات nginx upstream، ويمكن الوصول إليها عبر الوكيل العكسي nginx على الجهاز الافتراضي. تضمن الجلسات اللاصقة توجيهاً متسقاً للتطبيقات ذات الحالة (Juice Shop وDVWA وVAmPI وCSD Demo). جميع التطبيقات قابلة للاختراق عن قصد وصُممت لاختبار الأمان.

استبدل <ORIGIN> بـ http://<PUBLIC_IP> في جميع الأمثلة أدناه. بعد النشر عبر Terraform، احصل على عنوان IP بالأمر terraform output -raw public_ip.

المرجع السريع — جميع مسارات URL

Section titled “المرجع السريع — جميع مسارات URL”
المسارالتطبيقطريقة HTTPالاستجابة المتوقعة
/صفحة الهبوطGET200 HTML مع روابط لجميع التطبيقات
/healthفحص الصحةGET200 JSON {"status":"healthy","component":"origin-server",...}
/juice-shop/Juice ShopGET200 HTML (Angular SPA، ~75 KB)
/juice-shop/rest/products/search?q=Juice Shop APIGET200 JSON {"status":"success","data":[...]} (36 منتجاً)
/dvwa/DVWAGET302 إعادة توجيه إلى /dvwa/login.php
/dvwa/login.phpتسجيل الدخول إلى DVWAGET200 HTML نموذج تسجيل الدخول
/dvwa/setup.phpإعداد DVWAGET200 HTML (تهيئة قاعدة البيانات عند التشغيل الأول)
/vampi/VAmPIGET200 HTML (توثيق API)
/vampi/users/v1VAmPI APIGET200 JSON {"users":[...]}
/vampi/users/v1/registerVAmPI APIPOST200 JSON {"status":"success",...}
/vampi/users/v1/loginVAmPI APIPOST200 JSON {"auth_token":"...","status":"success"}
/httpbin/gethttpbinGET200 JSON مع تفاصيل الطلب
/httpbin/posthttpbinPOST200 JSON مع البيانات المُرسلة
/httpbin/headershttpbinGET200 JSON {"headers":{...}}
/httpbin/status/:codehttpbinGETيُعيد كود حالة HTTP المحدد
/whoami/whoamiGET200 نص عادي يتضمن اسم المضيف وعنوان IP وجميع الترويسات
/csd-demo/CSD DemoGET200 HTML نموذج الدفع مع لوحة الهجوم
/csd-demo/dashboardعرض المهاجم في CSDGET200 HTML يعرض البيانات المُستخرجة
/csd-demo/healthصحة CSDGET200 JSON {"status":"healthy","component":"csd-demo",...}
/csd-demo/exfil/logسجل استخراج CSDGET200 JSON مصفوفة من البيانات المُلتقطة
/dvga/DVGA GraphiQLGET200 HTML (GraphiQL IDE)
/dvga/graphqlDVGA GraphQL APIPOST200 JSON استجابة GraphQL
/restaurant/RESTaurantGET200 (إعادة توجيه إلى التوثيق)
/restaurant/docsRESTaurant SwaggerGET200 HTML (FastAPI Swagger UI)
/restaurant/openapi.jsonRESTaurant OpenAPIGET200 JSON مواصفة OpenAPI
http://<PUBLIC_IP>:8888crAPIGET200 HTML (SPA)
http://<PUBLIC_IP>:8888/identity/api/auth/signupتسجيل crAPIPOST200 JSON
http://<PUBLIC_IP>:8888/identity/api/auth/loginتسجيل الدخول إلى crAPIPOST200 JSON {"token":"..."}
المسار/juice-shop/
الصورةbkimminich/juice-shop:latest
النسخ4 (المنافذ 3001-3004)، لاصقة عبر hash $cookie_token، ذاكرة تخزين مؤقت للوكيل (مدة صلاحية 60 ثانية)
الموارد2 CPU / 1 GiB RAM لكل نسخة
الإطارNode.js / Angular
المشروعowasp.org/www-project-juice-shop

OWASP Juice Shop هو تطبيق الويب القابل للاختراق الأكثر حداثةً وصيانةً نشطة. يغطي OWASP Top 10 بالكامل مع أكثر من 100 تحدٍّ ضمن تطبيق تجارة إلكترونية واقعي.

سيناريوهات العرض التوضيحي

Section titled “سيناريوهات العرض التوضيحي”
السيناريوالفئةناقل الهجوم
تجاوز تسجيل الدخول عبر SQL Injectionجدار حماية تطبيقات الويب (WAF)' OR 1=1-- في حقل البريد الإلكتروني لتسجيل الدخول
Reflected XSSجدار حماية تطبيقات الويب (WAF)، الدفاع من جهة العميلحقن سكريبت عبر معامل البحث
DOM-based XSSالدفاع من جهة العميلحمولة في جزء URL
المصادقة المعطوبةجدار حماية تطبيقات الويب (WAF)هجوم القوة الغاشمة على تسجيل الدخول، والتلاعب بـ JWT
إساءة استخدام APIأمان APIوصول غير مصرح به إلى نقاط النهاية /api/
كشف البيانات الحساسةأمان APIالوصول إلى بيانات المستخدم دون تصريح
CSRFجدار حماية تطبيقات الويب (WAF)تزوير الطلبات عبر المواقع على تغييرات الملف الشخصي
Terminal window
curl -s "http://<PUBLIC_IP>/juice-shop/" -o /dev/null -w "%{http_code}"

DVWA (تطبيق الويب القابل للاختراق بشكل صارخ)

Section titled “DVWA (تطبيق الويب القابل للاختراق بشكل صارخ)”
المسار/dvwa/
الصورةمخصصة dvwa-fpm:latest (php-fpm + nginx، مبنية من ghcr.io/digininja/dvwa:latest)
النسخ4 (المنافذ 8101-8104)، لاصقة عبر hash $cookie_PHPSESSID
الموارد0.5 CPU / 256 MiB RAM لكل نسخة
قاعدة البياناتMariaDB 10.11 مشتركة (حاوية dvwa-db، 1 CPU / 768 MiB)
الإطارPHP 8 / php-fpm / MariaDB
بيانات الاعتمادadmin / password

DVWA هو المعيار الصناعي لاختبار جدار حماية تطبيقات الويب (WAF). يتميز بمستويات أمان قابلة للضبط (منخفض، متوسط، عالٍ، مستحيل) تضيف تدريجياً التحقق من المدخلات وترميز المخرجات.

سيناريوهات العرض التوضيحي

Section titled “سيناريوهات العرض التوضيحي”
السيناريوالفئةمستوى الأمان
SQL Injectionجدار حماية تطبيقات الويب (WAF)منخفض: ' OR 1=1# بسيط، عالٍ: SQLi أعمى
Command Injectionجدار حماية تطبيقات الويب (WAF)منخفض: ; ls، عالٍ: أحرف مُصفّاة
File Inclusionجدار حماية تطبيقات الويب (WAF)منخفض: اجتياز مسار مباشر، عالٍ: مُعقَّم
XSS (منعكس)جدار حماية تطبيقات الويب (WAF)، الدفاع من جهة العميلمنخفض: <script> أساسي، عالٍ: تجاوز بالترميز
XSS (مخزّن)جدار حماية تطبيقات الويب (WAF)، الدفاع من جهة العميلمنخفض: سكريبت دائم في سجل الزوار
File Uploadجدار حماية تطبيقات الويب (WAF)منخفض: رفع shell بـ PHP، عالٍ: تصفية الامتدادات
Brute Forceدفاع Bot القياسيمحاولات تسجيل دخول آلية

اضبط مستوى الأمان من /dvwa/security.php بعد تسجيل الدخول:

  • منخفض — لا يوجد تحقق من المدخلات. تنجح جميع الهجمات. مناسب لعروض توقيعات جدار حماية تطبيقات الويب (WAF).
  • متوسط — تصفية أساسية. تتطلب بعض الهجمات ترميزاً أو تقنيات تجاوز.
  • عالٍ — تصفية قوية. تنجح فقط التقنيات المتقدمة. مناسب لإظهار قيود جدار حماية تطبيقات الويب (WAF).
  • مستحيل — تطبيق آمن بالكامل. يُوضّح أسلوب الترميز الدفاعي الصحيح.

يتطلب DVWA إعداد قاعدة بيانات لمرة واحدة بعد النشر الأول:

  1. انتقل إلى http://<PUBLIC_IP>/dvwa/setup.php
  2. انقر على Create / Reset Database
  3. سجّل الدخول باستخدام admin / password

VAmPI (واجهة API قابلة للاختراق)

Section titled “VAmPI (واجهة API قابلة للاختراق)”
المسار/vampi/
الصورةerev0s/vampi:latest مع نقطة دخول gunicorn (4 عمال)
النسخ4 (المنافذ 5101-5104)، لاصقة عبر ip_hash (SQLite لكل نسخة)
الموارد0.5 CPU / 512 MiB RAM لكل نسخة
الإطارPython / Flask / gunicorn
المشروعgithub.com/erev0s/VAmPI

صُمّم VAmPI خصيصاً لاختبار OWASP API Security Top 10. يوفر واجهة REST API واقعية بثغرات متعمدة. تشغّل كل نسخة gunicorn بـ 4 عمال وقاعدة بيانات SQLite خاصة بها. تضمن الجلسة اللاصقة ip_hash أن عمليات التسجيل وتسجيل الدخول من نفس IP العميل تصل دائماً إلى النسخة ذاتها.

سيناريوهات العرض التوضيحي

Section titled “سيناريوهات العرض التوضيحي”
السيناريوOWASP API Top 10الطريقة
التخويل المعطوب على مستوى الكائن (BOLA)API1الوصول إلى بيانات مستخدمين آخرين عبر التلاعب بالمعرّفات
المصادقة المعطوبةAPI2معالجة رمز ضعيفة، لا تقييد للمعدل
الكشف المفرط عن البياناتAPI3يُعيد API بيانات أكثر مما يحتاجه العميل
التعيين الجماعيAPI6تعديل حقول المسؤول عبر معاملات غير متوقعة
SQL InjectionAPI8الحقن عبر معاملات API
إدارة الأصول غير الملائمةAPI9نقاط نهاية API غير موثّقة
Terminal window
# تسجيل مستخدم جديد
curl -X POST "http://<PUBLIC_IP>/vampi/users/v1/register" \
-H "Content-Type: application/json" \
-d '{"username":"test","password":"test123","email":"test@test.com"}'
# تسجيل الدخول
curl -X POST "http://<PUBLIC_IP>/vampi/users/v1/login" \
-H "Content-Type: application/json" \
-d '{"username":"test","password":"test123"}'
# سرد المستخدمين (كشف مفرط عن البيانات)
curl "http://<PUBLIC_IP>/vampi/users/v1"
المسار/httpbin/
الصورةkennethreitz/httpbin:latest مع تجاوز CMD لـ gunicorn (-w 4 -k gevent --timeout 30)
النسخ4 (المنافذ 8201-8204)، round-robin (عديم الحالة)
الموارد0.5 CPU / 256 MiB RAM لكل نسخة
الإطارPython / Flask / gunicorn + gevent
المشروعhttpbin.org

httpbin هي خدمة بسيطة للطلبات/الاستجابات HTTP مفيدة لعروض API الأساسية، واختبار ترويسات الطلبات، والتحقق من سلوك الوكيل.

نقطة النهايةالغرض
/httpbin/getيُعيد بيانات طلب GET (الترويسات، المعاملات، المصدر)
/httpbin/postيُعيد بيانات طلب POST (الجسم، النموذج، JSON)
/httpbin/headersيُعيد ترويسات الطلب
/httpbin/ipيُعيد عنوان IP المصدر
/httpbin/user-agentيُعيد ترويسة User-Agent
/httpbin/status/:codeيُعيد كود حالة HTTP المحدد
/httpbin/delay/:secondsيؤخّر الاستجابة لـ N ثانية
/httpbin/anythingيُعيد كل ما يُمرَّر في الطلب
Terminal window
# تحقق من الترويسات التي يراها الخادم المصدر (مفيد للتحقق من حقن ترويسات F5 XC)
curl -s "http://<PUBLIC_IP>/httpbin/headers" | jq .
# اختبار كود حالة HTTP محدد
curl -s -o /dev/null -w "%{http_code}" "http://<PUBLIC_IP>/httpbin/status/403"
المسار/whoami/
الصورةtraefik/whoami:latest
النسخ4 (المنافذ 8082-8085)، round-robin (عديم الحالة)
الموارد0.25 CPU / 64 MiB RAM لكل نسخة
الإطارGo
المشروعgithub.com/traefik/whoami

whoami هو خادم صدى الطلبات الخفيف الوزن من Traefik. يعرض كل تفاصيل طلب HTTP الوارد كما يراها خادم المصدر — اسم المضيف، وعناوين IP، وجميع الترويسات، والطريقة، وعنوان URL. وهو أهم أداة تشخيصية واحدة عند التحقق من أن F5 XC يحقن الترويسات الصحيحة.

حالات الاستخدام الرئيسية

Section titled “حالات الاستخدام الرئيسية”
حالة الاستخدامما يجب البحث عنه
التحقق من حقن ترويسات F5 XCترويسات X-Forwarded-For وTrue-Client-IP وX-Volterra-*
تأكيد رؤية IP العميلX-Real-IP مقابل RemoteAddr
تصحيح الإيجابيات الكاذبة لجدار حماية تطبيقات الويب (WAF)مقارنة ترويسات الطلب قبل F5 XC وبعده
التحقق من وسم دفاع Botترويسات X-Volterra-Bot-Type وX-Volterra-Bot-Verified
التحقق من إنهاء TLSيُظهر X-Forwarded-Proto قيمة https عند إنهاء TLS في F5 XC
Terminal window
# طلب أساسي -- انظر ما يتلقاه الخادم المصدر
curl "http://<PUBLIC_IP>/whoami/"
# محاكاة طلب عبر F5 XC (مع ترويسات محقونة)
curl "http://<PUBLIC_IP>/whoami/" \
-H "X-Forwarded-For: 203.0.113.50" \
-H "True-Client-IP: 203.0.113.50" \
-H "X-Forwarded-Proto: https"

مثال على الإخراج:

Hostname: 534c5084e169
IP: 127.0.0.1
RemoteAddr: 172.17.0.1:55118
GET / HTTP/1.1
Host: 20.12.78.159
User-Agent: curl/8.5.0
Accept: */*
True-Client-Ip: 203.0.113.50
X-Forwarded-For: 203.0.113.50, 10.0.0.1
X-Forwarded-Proto: https
X-Real-Ip: 104.219.105.84

DVGA (تطبيق GraphQL القابل للاختراق بشكل صارخ)

Section titled “DVGA (تطبيق GraphQL القابل للاختراق بشكل صارخ)”
المسار/dvga/
الصورةdolevf/dvga:latest
النسخ4 (المنافذ 5201-5204)، لاصقة عبر ip_hash (SQLite لكل نسخة)
الموارد0.5 CPU / 256 MiB RAM لكل نسخة
الإطارPython / Flask / GraphQL
المشروعgithub.com/dolevf/Damn-Vulnerable-GraphQL-Application

صُمّم DVGA خصيصاً لاختبار ثغرات GraphQL المحددة. يوفر GraphiQL IDE على /dvga/ لاستكشاف الاستعلامات بشكل تفاعلي، ونقطة نهاية GraphQL API على /dvga/graphql. تستخدم كل نسخة قاعدة بيانات SQLite خاصة بها، لذا تضمن الجلسات اللاصقة ip_hash حالة متسقة.

سيناريوهات العرض التوضيحي

Section titled “سيناريوهات العرض التوضيحي”
السيناريوالفئةناقل الهجوم
GraphQL Injectionأمان APIاستعلامات خبيثة عبر استيفاء السلاسل
رفض الخدمةأمان APIاستعلامات متداخلة بعمق، استعلامات دفعية، استنزاف الموارد
تجاوز التخويلأمان APIالوصول إلى بيانات غير مصرح بها عبر GraphQL
الكشف عن المعلوماتأمان APIاستعلامات الاستبطان التي تكشف تفاصيل المخطط
هجوم الدُّفعاتأمان APIعمليات متعددة في طلب واحد
Terminal window
# واجهة GraphiQL (IDE تفاعلي)
curl -sf "http://<PUBLIC_IP>/dvga/" -o /dev/null -w "%{http_code}"
# استعلام الاستبطان -- تعداد المخطط الكامل
curl -s "http://<PUBLIC_IP>/dvga/graphql" \
-H "Content-Type: application/json" \
-d '{"query":"{ __schema { types { name fields { name } } } }"}'
# سرد المقاطع (مثال استعلام)
curl -s "http://<PUBLIC_IP>/dvga/graphql" \
-H "Content-Type: application/json" \
-d '{"query":"{ pastes { title content } }"}'
# إنشاء مقطع (طفرة)
curl -s "http://<PUBLIC_IP>/dvga/graphql" \
-H "Content-Type: application/json" \
-d '{"query":"mutation { createPaste(title:\"test\", content:\"hello\", public:true) { paste { title } } }"}'

RESTaurant (لعبة API المطعم القابلة للاختراق بشكل صارخ)

Section titled “RESTaurant (لعبة API المطعم القابلة للاختراق بشكل صارخ)”
المسار/restaurant/
الصورةبناء مخصص من theowni/Damn-Vulnerable-RESTaurant-API-Game
النسخ4 (المنافذ 8301-8304)، round-robin (PostgreSQL مشترك)
الموارد0.5 CPU / 256 MiB RAM لكل نسخة
قاعدة البياناتPostgreSQL 15.4 مشترك (حاوية restaurant-db، 0.5 CPU / 512 MiB)
الإطارPython / FastAPI / PostgreSQL
بيانات الاعتمادadmin / password (PostgreSQL)
المشروعgithub.com/theowni/Damn-Vulnerable-RESTaurant-API-Game

RESTaurant هي واجهة REST API قابلة للاختراق بأسلوب اللعبة، وتغطي OWASP API Security Top 10 لعام 2023. تستخدم FastAPI مع توثيق Swagger UI التلقائي على /restaurant/docs. تشترك جميع النسخ الأربع في قاعدة بيانات PostgreSQL واحدة، لذا تعمل موازنة التحميل round-robin دون الحاجة إلى جلسات لاصقة.

سيناريوهات العرض التوضيحي

Section titled “سيناريوهات العرض التوضيحي”
السيناريوOWASP API Top 10 2023الطريقة
التخويل المعطوب على مستوى الكائن (BOLA)API1الوصول إلى طلبات مستخدمين آخرين عبر التلاعب بالمعرّفات
المصادقة المعطوبةAPI2معالجة رمز ضعيفة، حشو بيانات الاعتماد
التخويل المعطوب على مستوى خاصية الكائنAPI3التعيين الجماعي على حقول ملف المستخدم
استهلاك الموارد غير المقيّدAPI4لا تقييد للمعدل على نقاط النهاية
التخويل المعطوب على مستوى الوظيفة (BFLA)API5الوصول إلى نقاط نهاية المسؤول كمستخدم عادي
تزوير الطلبات من جانب الخادم (SSRF)API7التلاعب بطلبات URL من جانب الخادم
سوء تهيئة الأمانAPI8رسائل خطأ مفصّلة، بيانات اعتماد افتراضية
Terminal window
# واجهة Swagger UI
curl -sf "http://<PUBLIC_IP>/restaurant/docs" -o /dev/null -w "%{http_code}"
# مواصفة OpenAPI
curl -s "http://<PUBLIC_IP>/restaurant/openapi.json" | jq .info
# BOLA -- الوصول إلى طلب مستخدم آخر (بعد المصادقة)
curl -s "http://<PUBLIC_IP>/restaurant/orders/1" \
-H "Authorization: Bearer <token>"
# BFLA -- محاولة إجراء إداري كمستخدم عادي
curl -s -X POST "http://<PUBLIC_IP>/restaurant/admin/users" \
-H "Authorization: Bearer <user_token>" \
-H "Content-Type: application/json"

crAPI (OWASP واجهة API السخيفة تماماً)

Section titled “crAPI (OWASP واجهة API السخيفة تماماً)”
المنفذ8888 (مخصص — بدون بادئة مسار)
الصورcrapi/crapi-web، crapi/crapi-identity، crapi/crapi-community، crapi/crapi-workshop، PostgreSQL، MongoDB، MailHog
النسخ7 خدمات مصغّرة (نسخة واحدة لكل منها)
الموارد~3.0 CPU / ~2.0 GiB RAM إجمالاً
الإطارReact SPA + خدمات مصغّرة Java/Go/Python
المشروعgithub.com/OWASP/crAPI

crAPI هو المشروع الرائد لـ OWASP لاختبار أمان API. يعمل على شكل 7 خدمات مصغّرة على منفذ مخصص (8888) لأن React SPA يُرمّز مسارات API الخاصة به بشكل ثابت ولا يمكن تقديمه خلف بادئة مسار. تسمح NSG بحركة المرور الواردة على المنفذ 8888.

يلتقط MailHog جميع رسائل البريد الإلكتروني المُرسلة بواسطة crAPI (التحقق من الحساب، إعادة تعيين كلمة المرور). يمكن الوصول إلى MailHog عبر نفق SSH على المنفذ 18025.

الفئةالثغرات
BOLA (التخويل المعطوب على مستوى الكائن)الوصول إلى مركبات المستخدمين الآخرين وطلباتهم وتقاريرهم
BFLA (التخويل المعطوب على مستوى الوظيفة)التصعيد إلى مسؤول، والوصول إلى نقاط النهاية المقيّدة
التعيين الجماعيتعديل الحقول المحمية (الدور، الرصيد) عبر API
SSRF (تزوير الطلبات من جانب الخادم)التلاعب بجلب URL من جانب الخادم
التلاعب بـ JWTتزوير رموز JWT أو تعديلها لتصعيد الصلاحيات
NoSQL Injectionحقن استعلامات في نقاط النهاية المدعومة بـ MongoDB
الكشف المفرط عن البياناتيُعيد API بيانات حساسة للمستخدم
Terminal window
# التحقق من تشغيل crAPI
curl -sf "http://<PUBLIC_IP>:8888" -o /dev/null -w "%{http_code}"
# تسجيل مستخدم جديد
curl -s -X POST "http://<PUBLIC_IP>:8888/identity/api/auth/signup" \
-H "Content-Type: application/json" \
-d '{"name":"Test User","email":"test@example.com","number":"1234567890","password":"Test1234!"}'
# تسجيل الدخول
curl -s -X POST "http://<PUBLIC_IP>:8888/identity/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com","password":"Test1234!"}'
# الوصول إلى MailHog (عبر نفق SSH للتحقق من البريد الإلكتروني)
# ssh -L 18025:localhost:18025 azureuser@<PUBLIC_IP>
# ثم افتح http://localhost:18025 في متصفحك
Port 8888 -> crapi-web (React SPA + nginx)
-> crapi-identity (Java, user auth, JWT)
-> crapi-community (Go, forums, posts)
-> crapi-workshop (Python, vehicle service)
-> crapi-postgres (PostgreSQL)
-> crapi-mongo (MongoDB)
-> crapi-mailhog (email capture, port 18025)

مصفوفة تغطية التطبيقات

Section titled “مصفوفة تغطية التطبيقات”
حالة استخدام العرض التوضيحيالتطبيق الأساسيالتطبيق الثانوي
جدار حماية تطبيقات الويب (WAF) — SQL InjectionDVWAJuice Shop
جدار حماية تطبيقات الويب (WAF) — XSSDVWAJuice Shop
جدار حماية تطبيقات الويب (WAF) — Command InjectionDVWA
أمان API — BOLAVAmPI
أمان API — تجاوز المصادقةVAmPIJuice Shop
أمان API — كشف البياناتVAmPIhttpbin
دفاع Bot القياسي — القوة الغاشمةDVWAJuice Shop
دفاع Bot القياسي — الاستخراجJuice Shop
الدفاع من جهة العميل — DOM XSSJuice Shop
الدفاع من جهة العميل — XSS المخزّنDVWAJuice Shop
الدفاع من جهة العميل — ناشل بطاقاتCSD Demo
الدفاع من جهة العميل — اختطاف النماذجCSD Demo
الدفاع من جهة العميل — مسجّل لوحة المفاتيحCSD Demo
الدفاع من جهة العميل — تعدين العملات المشفرةCSD Demo
الدفاع من جهة العميل — اختطاف DOMCSD Demo
أمان API — حقن GraphQLDVGA
أمان API — رفض خدمة GraphQLDVGA
أمان API — OWASP API Top 10 2023RESTaurantcrAPI
أمان API — BFLARESTaurantcrAPI
أمان API — التعيين الجماعيcrAPIRESTaurant
أمان API — SSRFcrAPIRESTaurant
أمان API — التلاعب بـ JWTcrAPI
أمان API — حقن NoSQLcrAPI
اختبار الاتصال الأساسيhttpbin
تشخيص الطلباتwhoamihttpbin
التحقق من حقن الترويساتwhoami