hook cors هو المحرك الحتمي خلف التخصص http-request، ويمكنك تشغيله بنفسك. ويعمل بوضعين من أمر واحد: scan يفحص الكود المصدري بحثًا عن قائمة سماح للمصادر يمكن تجاوزها (تعبير نمطي للتحقق من المضيف يتسلل منه مضيف المهاجم)، و score يقيّم قيمة مصدر CORS واحدة على أنها wildcard أو null أو safe.
افحص قاعدة كود
دون أي خيار، يفحص المشروع كله.
- المشروع كله
- دليل
- ملف واحد
npx lagune read cors
npx lagune read cors --dir src/server
npx lagune read cors --file internal/auth/origin.go
يسرد كل قائمة سماح يمكن تجاوزها تحت عنوان واحد، مجمّعة حسب الملف. فأداة التحقق من المضيف التي يقع فيها .+/.* في جزء 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
كرّر --origin لتقييم قائمة سماح كاملة في استدعاء واحد، بحكم في كل سطر، بالترتيب.
npx lagune read cors \
--origin 'https://app.example.com' \
--origin '*' \
--origin 'null'
# => safe
# => wildcard
# => null
| الحكم | المعنى |
|---|---|
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.
