Hooks

hook cors: دقّق مصادر CORS

افحص الكود المصدري بحثًا عن قائمة سماح لمصادر CORS يمكن تجاوزها، أو قيّم قيمة مصدر واحدة بحثًا عن وصول متساهل أكثر من اللازم، من سطر الأوامر.

hook cors هو المحرك الحتمي خلف التخصص http-request، ويمكنك تشغيله بنفسك. ويعمل بوضعين من أمر واحد: scan يفحص الكود المصدري بحثًا عن قائمة سماح للمصادر يمكن تجاوزها (تعبير نمطي للتحقق من المضيف يتسلل منه مضيف المهاجم)، و score يقيّم قيمة مصدر CORS واحدة على أنها wildcard أو null أو safe.

افحص قاعدة كود​

دون أي خيار، يفحص المشروع كله.

npx lagune read cors

يسرد كل قائمة سماح يمكن تجاوزها تحت عنوان واحد، مجمّعة حسب الملف. فأداة التحقق من المضيف التي يقع فيها .+/.* في جزء authority قبل لاحقة المضيف الموثوق (^https?://.+\.trusted\.com) تسمح لمضيف مهاجم مثل your-site.com.attacker.com بالتسلل.

Origin-allowlist patterns with a greedy wildcard (bypassable, review):

internal/auth/origin.go
^https?://.+\.trusted\.com

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

npx lagune read cors --dir src/clean
# => no bypassable origin allowlist found

قيّم مصدرًا​

مرّر كل مصدر عبر --origin. يطبع hook كلمة واحدة لكل مصدر، وينتهي برمز خروج غير صفري عند أي wildcard أو null.

npx lagune read cors --origin '*' # => wildcard
npx lagune read cors --origin 'null' # => null
npx lagune read cors --origin 'https://app.example.com' # => safe
الحكمالمعنى
safeليس * ولا null ولا نمط glob يحتوي على *. ولا يضمن أن المصدر سليم الصياغة.
wildcard*، أو نمط glob للنطاق الفرعي أو المضيف أو المنفذ: يمكن لأي موقع (أو لمجموعة واسعة) قراءة الاستجابة.
nullالمصدر null، الذي يمكن لإطارات iframe المعزولة وعمليات إعادة التوجيه تزويره.

لا يعني السماح إلا safe، و --origin حَكَم على القيمة: يحكم على القيمة لا على الـ handler، لذلك تحقق من الـ handler عبر التخصص http-request.

خيارات CLI​

الخيارالقيمةالوصف
--originمصدرقيّم قيمة مصدر واحدة. كرّره لتقييم عدة مصادر، واحدًا في كل سطر.
--dirدليليحصر الفحص في دليل. يتكرر ويُجمع مع --file.
--fileملفيحصر الفحص في ملف واحد. يتكرر ويُجمع مع --dir.

دون أي خيار، يفحص المشروع كله. و --origin هو وضع score ولا يمكن جمعه مع --dir أو --file.

اختر ما يفحصه​

يستثني ما يتجاهله Git. ولاستثناء المزيد، أو لفحص ما يتجاهله Git، امنح cors إعدادات خاصة به:

npx lagune write add --ignore test/fixtures --checker cors
{
"checkers": {
"cors": { "gitignore": false, "ignore": ["test/fixtures"] }
}
}

تشرح صفحة إعداد hooks كل إعداد.

ما لا يغطيه

يقرأ الفحص شكل التعبير النمطي القابل للتجاوز، ويقيّم --origin قيم المصادر. ويبقى نمطان على مستوى الكود المصدري خارج نطاقه: عكس Origin الخاص بالطلب (يعيد الخادم Origin الوارد كما هو، أو يقرنه ببيانات الاعتماد)، وقائمة سماح متساهلة تعتمد على endsWith/substring. تعرّف عليهما في الكود وتعامل معهما كما يصف التخصص http-request.

الأسئلة الشائعة

ترسل إطارات iframe المعزولة وبعض عمليات إعادة التوجيه Origin: null، لذلك تمنح قائمة السماح التي تثق في null تلك السياقات صلاحية القراءة. وينبّه hook cors إليه إلى جانب wildcard.

شغّل npx lagune read cors على قاعدة الكود. ينبّه إلى التعبير النمطي للتحقق من المضيف الذي يقع فيه wildcard الجشع قبل اللاحقة الموثوقة، فيتسلل مضيف مهاجم مثل your-site.com.attacker.com.