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

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

Canonical: https://lagune.ai/ar-AE/docs/hooks/cors
اللغة: ar-AE
الأصل: https://lagune.ai/docs/hooks/cors
آخر تحديث: 2026-11-09

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

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

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

**المشروع كله**

```bash
npx lagune read cors
```

**دليل**

```bash
npx lagune read cors --dir src/server
```

**ملف واحد**

```bash
npx lagune read cors --file internal/auth/origin.go
```

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

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

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

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

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

## قيّم مصدرًا

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

**مصدر واحد**

```bash
npx lagune read cors --origin '*'                       # => wildcard
npx lagune read cors --origin 'null'                    # => null
npx lagune read cors --origin 'https://app.example.com' # => safe
```

**عدة مصادر**

كرّر `--origin` لتقييم قائمة سماح كاملة في استدعاء واحد، بحكم في كل سطر، بالترتيب.

```bash
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` إعدادات خاصة به:

```bash
npx lagune write add --ignore test/fixtures --checker cors
```

```json
{
  "checkers": {
    "cors": { "gitignore": false, "ignore": ["test/fixtures"] }
  }
}
```

تشرح صفحة [إعداد hooks](https://lagune.ai/ar-AE/docs/hooks/configure) كل إعداد.

**ما لا يغطيه**

يقرأ الفحص شكل **التعبير النمطي القابل للتجاوز**، ويقيّم `--origin` **قيم** المصادر. ويبقى نمطان على مستوى الكود المصدري خارج نطاقه: عكس `Origin` الخاص بالطلب (يعيد الخادم `Origin` الوارد كما هو، أو يقرنه ببيانات الاعتماد)، وقائمة سماح متساهلة تعتمد على `endsWith`/substring. تعرّف عليهما في الكود وتعامل معهما كما يصف [التخصص `http-request`](https://lagune.ai/ar-AE/docs/catalog).

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

### لماذا يُعد مصدر CORS بقيمة null خطيرًا؟

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

### كيف أكتشف قائمة سماح لمصادر CORS يمكن تجاوزها؟

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