تستقبل بوابة ويب عنواناً من مستخدم، تتحقق من hostname بطريقة، ثم تمرره إلى مكتبة أخرى لتكوين الطلب. إذا أعاد parserان تفسير السلسلة بشكل مختلف فقد يفحص البرنامج قيمة ويستخدم أخرى. مشروع تخرج الأمن السيبراني يبني corpus محلياً لعناوين مسموحة ومرفوضة، ويقارن حقول scheme وuserinfo وhost وport وpath وquery بعد parsing. تذكر RFC 3986 قواعد URI العامة، بينما يحدد WHATWG URL Standard سلوك URL كما تستخدمه منصات الويب. المقارنة تثبت اختلافاً في هذين التنفيذين فقط؛ لا تعني أن كل proxy أو خادم سيتصرف بالطريقة نفسها.
وتناسب الفكرة مشاريع تخرج الأمن السيبراني عندما يحدد الفريق نطاقاً صغيراً، ويعرض حالات النجاح والفشل في تقرير يمكن للمشرف إعادة تشغيله.
اجعل نطاق التجربة offline
جهز fixtures نصية مثل عنوان كامل وعنوان نسبي وport افتراضي واسم Unicode وpercent-encoding وuserinfo. لا تفتح العناوين في المتصفح ولا تطلبها من الشبكة؛ البرنامج يحلل النص ويطبع النتيجة فقط. ضع حدوداً لطول السلسلة وعدد الاختبارات، واحذف أي عنوان يتضمن credential حقيقياً قبل تسجيله. استخدم نطاقات محجوزة مثل example.test في الأمثلة. المقصود اختبار اختلاف قواعد القراءة، وليس فحص خدمة خارجية أو تجربة تجاوز حماية على موقع.
قارن مكتبتين محددتين
اختر parser المتصفح القياسي ومكتبة الخادم التي يستخدمها المشروع، وثبت إصدارات runtime. اعرض كائن النتيجة لكل مدخل مع raw input إلى جانبه. في Node مثلاً توضح وثائق URL واجهة WHATWG URL وبعض تفاصيل legacy URL؛ لا تخلط الموديلين ثم تسميهما محللاً واحداً. استخدم RFC مرجعاً للمقارنة النظرية فقط، فالـWHATWG parser قد يتضمن قواعد web compatibility مختلفة عن grammar العامة. سجل إذا رفض محلل قيمة أو صححها بدلاً من قبولها.
افحص المكونات التي يعتمد عليها القرار
قارن scheme وhostname بعد التطبيع، port، path segments، query، fragment، وuserinfo. شغّل حالات فيها casing مختلف، default port، نقطة أو مسار نسبي، percent-encoded حرف داخل path، IDNA hostname، slash إضافي، وuserinfo قبل @. لا تقرر أن اختلاف النص الخام يعني أن العنوانين يشيران حتماً لمورد مختلف؛ أحياناً توجد صيغ متكافئة، وأحياناً يغير التطبيع المعنى. أظهر المكوّن المختلف وقرار النظام الذي يعتمد عليه، مثل allowlist للمضيف أو مقارنة المسار.
مثال على قرار allowlist
اكتب سياسة محلية تسمح فقط بالمضيف docs.example.test والمنفذ 443. مرر مجموعة fixtures إلى validator وإلى parser المستعمل لاحقاً في تكوين الوجهة، ثم تحقق أن كليهما يعمل على القيمة canonical نفسها. عناوين تحوي userinfo أو hostname إضافياً أو scheme غير HTTP(S) يجب أن تُرفض بحسب السياسة المعلنة. RFC 9110 يحذر من الغموض المحتمل في references غير الموثوقة عند التعامل مع userinfo؛ لذلك يجعل المختبر وجوده سبباً للرفض في policy التعليمية، لا محاولة لتفسيره كجزء harmless من الرابط. لا تستعمل النتائج لاختبار SSRF على نظام حقيقي.
اختبارات قبول ضد regressions
احفظ كل fixture ونتيجة متوقعة لكل component في ملف JSON. بعد تحديث Node أو المكتبة، أعد المقارنة وسجل الاختلاف بدلاً من تحديث golden file تلقائياً. اختبر malformed percent escape، عنواناً نسبياً بلا base، نصاً فارغاً، scheme مكتوباً بأحرف مختلفة، وعنواناً طويلاً فوق الحد. يجب ألا يسقط البرنامج أو يتصل بالشبكة، وأن تكون النتيجة واضحة: accepted canonical form أو rejected with reason. إذا تعارض parserان، ارفع الحالة للمراجعة ولا تختَر الأكثر تساهلاً كي تمر الاختبارات.
حوّل الاختلاف إلى سياسة قابلة للفهم
التقرير لا يصنف كل فرق على أنه ثغرة؛ يرتبها حسب تأثيره في allowlist أو cache key أو route. أظهر هل backend يعيد parsing بعد validation، وهل القيمة canonical نفسها تصل إلى sink. لا تخزن مدخلات أشخاص في سجل دائم، ولا تضع روابط قابلة للنقر لتجنب فتحها خطأ. فرق بين Unicode display normalization وhostname serialization؛ قد يلزم عرض نسخة punycode بجوار الاسم المقروء، لكن يجب أن تستعمل المكتبة المعيارية. هذه الشفافية تمنع حيلة واحدة من أن تتحول إلى قاعدة عامة زائفة.
تسليم مشروع آمن للتشغيل
يسلم الفريق corpus اصطناعياً وrunner offline ومقارنة parse trees وسياسة توحيد للمدخلات قبل أي استخدام. يمكن إدراج الموضوع ضمن مشاريع التخرج وخدمة تطوير المواقع والتطبيقات. يذكر التقرير أن النتائج تخص نسخ المكتبات والfixtures فقط؛ لا يقدم تدقيقاً لكل سلسلة reverse proxies أو حماية كاملة ضد SSRF. نجاح النموذج أن يمنع التطبيق من التحقق من قيمة ثم استخدام أخرى، وأن يستطيع المشرف إعادة الاختبار دون إرسال طلب خارجي.
المصادر
مراجعة المصادر: .
اختبار المثال وحدوده
كل strings حالات محلية معروفة ولا ترسل إلى أي خادم؛ النتائج تصف إصدارين محددين من parser لا كل proxies.
مقالات ذات صلة
الخدمة المرتبطة: تطوير المواقع والتطبيقات والأنظمة المخصصة.
أرسل متطلبات مشروعك