أمان الويب / المتوسط: دفاعات المتصفح وتفسير البيانات / الدرس 12
SSRF وحدود اتصال الخادم الصادر
قيد جلب الخادم بسياسة وجهة وعميل مدعوم وضبط شبكة ورد محدود.
في هذه الصفحة
أهداف الدرس
- ميّز تحليل رابط مسموح من الاتصال الآمن بوجهته.
- راجع التحويل وDNS والاعتماد واستخدام الرد دون طلب فعلي.
اعرف سلطة جلب الخادم
قد تدفع الصورة المستوردة أو معاينة الرابط أو callback الخادم للاتصال بشبكته واعتماده، وهو حد مختلف عن فتح المتصفح URL نفسه. فضل وجهات معروفة قليلة أو معرف مورد مملوكاً عند سماح المنتج. لا توفر مرحّلاً غير مقيد لأن المستخدم مصادق. سمّ البروتوكول والمضيف وغرض المسار والرد والمالك. لا تنفذ الدورة جلباً أو DNS أو اتصال هدف؛ تحلل محلياً فقط لتوضيح الفرق بين تفسير العنوان ومنح سلطة الوصول إليه.
صنف أصلاً معلناً دون جلبه
يربط المساعد أصل HTTPS اصطناعياً بفئة وجهة، ويرفض معلومات المستخدم والجزء fragment لهذه الميزة. ليس النجاح دفاع SSRF كاملاً؛ لا يفحص العنوان المحلول أو التحويل أو إعادة الاتصال أو الوكيل أو المحتوى. يساعد محلل شبيه بالمتصفح التطبيع، وقد تختلف دلالات عميل HTTP المختار. اربط التمثيل المتحقق بما يستخدمه العميل فعلاً. وتبقى قيود المسار والمورد الخاصة بالمنتج لازمة داخل أصل معتمد؛ فاعتماد المضيف لا يعني الموافقة على كل فعل لديه.
function destinationCategory(value) {
if (typeof value !== "string") return null
try {
const url = new URL(value)
if (url.protocol !== "https:" || url.username || url.password || url.hash) return null
const approved = new Map([["https://media.example.invalid", "approved-media"]])
return approved.get(url.origin) ?? null
} catch {
return null
}
}
if (destinationCategory("https://media.example.invalid/cover") !== "approved-media") {
throw new Error("DESTINATION_CATEGORY_MISMATCH")
}
if (destinationCategory("https://other.example.invalid/cover") !== null) {
throw new Error("UNAPPROVED_ORIGIN_ACCEPTED")
}
يستخدم محلل URL المحلي في Node ونطاقات خيالية محجوزة، ولا يجلب الرابطين. تثبت التأكيدات ربط فئة أصل ضيقاً، لا اتصال خادم آمناً أو حماية الموارد الداخلية.
راجع مسار الاتصال الفعلي
راعِ DNS والعناوين التي يتصل بها العميل المعتمد فعلياً. لا يثبت اسم روجع مرة كل وجهة اتصال لاحقة. تغير التحويلات الهدف؛ فعطل غير اللازم أو طبق السياسة المراجعة على كل قفزة مدعومة. تكمل ضوابط خروج الشبكة منع الوصول لموارد داخلية وإدارية حساسة. لا تحول اعتماد الخادم أو ملفاته أو رؤوس الإذن لوجهة اعتباطية. تحتاج القرارات دلالات العميل والمنصة الفعلية، ولا تنفذها قائمة نصية وحدها مهما بدا تحليلها صحيحاً.
حدد جلباً ورداً محدودين
تسجل الخطة فحوص الوجهة والنقل والهوية وحد الرد والمحتوى مستقلة. ليست جداراً أو وكيلاً أو طلباً لنقطة metadata سحابية. حد وقت الاتصال ومجموع بايتات الرد وكلفة الفك والتحليل والتزامن وفق الخدمة. تحقق قبل التخزين والعرض ولا تعد رد خادم خاصاً بمعاينة عامة. لا يطلق الفشل إعادات غير مضبوطة أو يكشف عنواناً داخلياً واعتماداً بالخطأ. اجعل سلطة خدمة الجلب ضيقة بقدر الغرض الذي أنشئت من أجله.
{
"feature": "synthetic-cover-import",
"destination": "approved-category-only",
"resolutionAndConnection": "reviewed-platform-control",
"redirects": "not-needed-by-this-feature",
"ambientCredentials": "not-forwarded",
"responsePolicy": ["bounded-duration", "bounded-size", "validated-content"],
"operationalState": "plan-only"
}
لا ينشئ الملف قاعدة خروج أو يتصل بخدمة. يحتاج كل ضبط مسمى دليلاً على تنفيذه بالمنصة الفعلية. لا تشير الوسوم والنطاقات إلى هدف حقيقي أو مصدر اعتماد.
تحقق من حد العميل والشبكة بأمان
اختبر ببيئة معزولة مفوضة وبدائل DNS ونقل الوجهة المعتمدة ورفض السياسة والتحويل والمهلة والرد الضخم أو غير الصالح. لا تفحص شبكة حقيقية أو تطلب نقاطاً داخلية لإثبات الدرس. تحقق من استخدام العميل للتمثيل المتحقق، ومن خلو الخطأ والسجل من السر. راجع طابور المحتوى وتنظيفه، وصن السياسة عند تغير المورد والعنوان والمعمارية. الناتج قدرة خدمة مقيدة بدليل واضح، لا وعد بأن محلل URL واحد يؤمن جميع عمليات جلب الخادم.
الأخطاء الشائعة وإصلاحها
يسمى المضيف المسموح دفاع SSRF كاملاً
- لماذا يحدث؟
- اختلط التحليل بضبط الحل والاتصال.
- كيف تصلحه؟
- راجع العميل والتحويل والوجهة المحلولة والخروج.
- كيف تتجنب تكراره؟
- حدد كل افتراض اتصال غير متحقق.
تحول المعاينة اعتمادات مميزة
- لماذا يحدث؟
- أعيدت سلطة الخادم لوجهة غير موثوقة.
- كيف تصلحه؟
- أزل الزائد بالتصميم المعتمد.
- كيف تتجنب تكراره؟
- راجع الهوية والوجهة معاً.
يسبب URL صغير معالجة بلا حد
- لماذا يحدث؟
- أُغفلت كلفة الرد والفك.
- كيف تصلحه؟
- طبق حدود الرد والوقت والمعالجة المراجعة.
- كيف تتجنب تكراره؟
- اختبر الكبير والمهلة المضبوطين محلياً.
اختبر فهمك
1. لماذا لا يثبت المصنف سلامة DNS؟
اعرض الحل المشروح
لا يحل المصنف اسماً ولا يرصد عنوان اتصال العميل. يخص ذلك حداً مستقلاً للمنصة والاتصال، مع التحويلات وتغير النتائج. تحقق ببدائل معتمدة وأدلة تكامل فعلية حيث يفوض، ولا تنسب لفحص السلسلة ما لم يرصده.
2. تحتاج الميزة وسائط مورد واحد. هل تقبل كل URL؟
اعرض الحل المشروح
يسهل تقييد وجهة أو معرف مورد معتمد ضيق أكثر من مرحّل عام. راجع المسارات والنقل وحد الرد والاعتماد وتغير المورد، بدلاً من منح امتداد شبكة الخادم لأي إدخال مستخدم. تختار الواجهة أصغر قدرة تحقق حاجة المنتج.
أهم ما تعلمته
- يستخدم الجلب سلطة الخادم.
- التحليل وDNS والتحويل والخروج حدود منفصلة.
- حد الرد وأبعد الاعتماد عن الاعتباطي.