محتويات الدورة

Express.js / المتوسط: الوحدات والهوية والموائمات / الدرس 10

أصول المتصفح وحدود CORS وCSRF

افصل سياسة قراءة الرد في المتصفح عن المصادقة ومنع تغييرات الحالة غير المرغوبة.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • اشرح الفحص التمهيدي والاعتمادات والمطابقة الدقيقة للأصل.
  • اختر ضوابط CSRF بحسب طريقة وصول الاعتمادات إلى الطلب.

تضبط CORS قراءة المتصفح لا تفويض الخادم

تخبر ترويسات CORS المتصفح هل يسمح لشيفرة من أصل آخر بقراءة الرد. لا يمنع الوسيط العملاء العشوائيين من إرسال الطلب، ولا يلتزم العميل غير المتصفح بسياسة المتصفح. يشمل الأصل المخطط والمضيف والمنفذ، ويختلف عن مفهوم الموقع الذي تستعمله ملفات SameSite. حافظ على دقة الفرق. الأصل المسموح ليس هوية مصادقاً عليها، وغياب ترويسة CORS لا يثبت أن طلب تغيير الحالة لم يصل للخادم. يبقى تفويض المجال لازماً لكل فعل محمي؛ فالقراءة من الشيفرة والتنفيذ على الخادم حدان مختلفان.

اسمح بالأصل المقصود وسياسة اعتماد صريحة

يسمح الوسيط التوضيحي بأصل بوابة اصطناعي واحد وبالاعتمادات، ولا يثبت cors أو يضبط إرسال الملف أو يصادق المستخدم. لا تستخدم رد Access-Control-Allow-Origin شاملاً كاختصار لكل قراءة مع اعتمادات. على القائمة الديناميكية إعادة الأصل الموافق المعتمد وحفظ اختلاف المخبأ الصحيح عندما تتغير الاستجابة بحسب Origin. حدد التعامل مع غياب الأصل أو قيمته null وفق العملاء الفعليين ولا توافق عليهما صامتاً. اختبر الفحص التمهيدي والطلب الفعلي منفصلين، لأن نجاح OPTIONS لا يثبت تفويض كتابة محمية.

javascript سياسة أصل واعتماد توضيحية
app.use("/api", cors({
  origin:"https://portal.example.invalid",
  credentials:true,
  methods:["GET","POST"],
  allowedHeaders:["Content-Type","X-CSRF-Token"]
}));

الأصل المنتهي بـ.invalid اصطناعي. يوضح الجزء سياسة متصفح بوسيط مفترض دون تنفيذ طلب.

قيم الكتابة غير المرغوبة من آلية الاعتماد

تتعلق CSRF بتنفيذ المتصفح فعلاً موثقاً غير مرغوب باستخدام سلطة يرفقها آلياً، وغالباً ملف ارتباط. استعمل بروتوكول رمز مراجعا أو ما يعادله وفحص الأصل حيث يناسب وسمات ملف مناسبة؛ لا يغطي إعداد واحد كل تطبيق. أبق GET بلا تغييرات حالة مقصودة. قد يظل خادم مصادق معرضاً إن قبل فعلاً مزوراً من سياق آخر ولو تعذر على المهاجم قراءة الرد. وللاعتماد في ترويسة سلوك إرفاق مختلف لكنه يحتاج حماية من السرقة واختراق الشيفرة. اختر الضوابط من آلية السلطة لا من اسم الوسيط.

ارفض خدع اللاحقة بمطابقة الأصل المحلل بدقة

يقارن الشرط المحلي أصل URL محللًا بأصل معتمد ثابت، فيرفض مضيفاً مخادعاً يبدأ بالنص المتوقع ويرفض الإدخال المعيب. هو نموذج قائمة صغير لا تنفيذ CORS كامل؛ إذ تحتاج صياغة المتصفح والأصول null والاعتمادات والفحص التمهيدي اختبارات دمج. تجنب contains أو endsWith فضفاضة قد تسمح بمجال شقيق يملكه مهاجم. إذا تعددت الأصول فاحفظ أصولاً طبيعية دقيقة بإجراء تغيير مراجع، بدلاً من توسيع قاعدة نصية حتى تختفي الرسائل. لا يستدعي تحليل URL هنا الشبكة أو يثبت ملكية المضيف.

javascript مقارنة أصل محلية كاملة
function approvedOrigin(value) {
  try {return new URL(value).origin === "https://portal.example.invalid";}
  catch {return false;}
}
console.assert(approvedOrigin("https://portal.example.invalid"));
console.assert(!approvedOrigin("https://portal.example.invalid.attacker.invalid"));
console.assert(!approvedOrigin("not-a-url"));

يقبل الأصل الاصطناعي الدقيق ويرفض المضيف المخادع والقيمة المعيبة. لا يفتح تحليل URL اتصالاً.

افحص كل حد دون إضعاف ضوابط أخرى

افحص الطريقة وOrigin ورد الفحص والرد الفعلي ونمط الاعتماد وأهلية الملف ونتيجة تفويض الخادم. لا تصلح الدخول بالسماح لكل أصل أو تعطيل CSRF. قد يفشل الطلب في المتصفح بعد تنفيذ الفعل بالخادم؛ فاحفظ هوية العملية عند بحث الإعادة. اختبر المسموح والممنوع بعينات آمنة في بيئة معزولة مأذون بها. يتحقق المقرر من المقارنة المحلية فقط، وتبقى آلية المتصفح والملفات وتوليد الترويسات حدود دمج لم تنفذ. يساعد التصنيف على إصلاح الضابط المعني دون جعل بقية التطبيق أوسع صلاحية.

الأخطاء الشائعة وإصلاحها

تعامل CORS كمصادقة

لماذا يحدث؟
اختلط سماح القراءة بسلطة المستدعي.
كيف تصلحه؟
صادق وفوض مستقلاً عن الأصل.
كيف تتجنب تكراره؟
اختبر عميلاً غير متصفح بالسياسة نفسها.

يستخدم رد مع اعتماد أصلاً شاملاً

لماذا يحدث؟
لم يتوافق نمط الاعتماد وسياسة الرد.
كيف تصلحه؟
أعد أصلاً معتمداً صريحاً واختلاف مخبأ صحيحاً.
كيف تتجنب تكراره؟
اختبر الفحص والقراءة الفعلية مع الاعتماد.

تنجح كتابة مزورة رغم تعذر قراءة الرد

لماذا يحدث؟
توقع من CORS منع فعل CSRF.
كيف تصلحه؟
طبق بروتوكول CSRF الموافق للاعتماد الآلي.
كيف تتجنب تكراره؟
اختبر أثر الحالة بجانب إمكان قراءة الرد.

اختبر فهمك

1. لماذا لا يثبت فشل القراءة أن الكتابة لم تحدث؟

اعرض الحل المشروح

قد ينفذ الخادم قبل رفض المتصفح قراءة الرد. تضبط CORS الوصول وتنفصل عن التنفيذ وCSRF. احفظ معرف العملية وسو النتيجة المعتمدة قبل إعادة الكتابة، ولا تستنتج التراجع من رسالة وحدة المتصفح.

2. هل يختبر شرط URL وسيط CORS الفعلي؟

اعرض الحل المشروح

لا؛ يفحص مقارنة الأصل وعينتي رفض محليتين، لا الترويسات أو الاعتمادات أو المتصفح. احفظ دليله الضيق ثم تحقق من تركيب التطبيق وسياسة المتصفح بطلبات اصطناعية عند الإذن بالدمج.

أهم ما تعلمته

  • تحمي CORS وCSRF والمصادقة حدوداً مختلفة.
  • لا تثبت أخطاء المتصفح غياب أثر في الخادم.

المراجع الرسمية