واجهة حساب الغربان تعكس أي قيمة origin يرسلها العميل في ترويسة Access-Control-Allow-Origin وتسمح بالاعتماد فأي موقع يستطيع قراءة رد الحساب المصادق عليه
صفحة اختبار CORS تدخل فيها أصل صفحة تتحكم بها فتجلب واجهة الحساب وتعرض ترويسات السماح وهل تستطيع صفحتك قراءة الرد المصادق عليه
لماذا نجح الحل
عكس الأصل مع السماح بالاعتماد يعني أن أي موقع يقرأ البيانات المصادق عليها للضحية الحل قائمة سماح ثابتة بالأصول الموثوقة ومطابقة تامة لا عكس ما يصل
السبب الجذري
عكس الأصل في ترويسة السماح مع الاعتماد الجذر الثقة في أصل الطلب لتقرير من يقرأ
كيف يصلح الكود
اعتمد قائمة سماح ثابتة بالأصول الموثوقة ولا تعكس أصل الطلب
الكود المصاب
res.setHeader('Access-Control-Allow-Origin', req.headers.origin); // reflects anything
res.setHeader('Access-Control-Allow-Credentials', 'true');
الكود الآمن
const ALLOW = new Set(['https://account.ravens.lab', 'https://www.ravens.lab']);
if (ALLOW.has(req.headers.origin)) res.setHeader('Access-Control-Allow-Origin', req.headers.origin);
الأثر في الواقع
سوء إعداد CORS يسرب بيانات حسابات مصادق عليها لأي موقع يزوره الضحية وقد سرب بيانات مستخدمين حقيقية
كيف يكتشفها المدافعون
المدافع يستخدم قائمة سماح ثابتة ويرصد ردودا تعكس الأصل مع السماح بالاعتماد