# Хук cors: аудит источников CORS

> Просканируйте исходный код на обходимый список разрешенных источников CORS или оцените отдельное значение источника на избыточно широкий доступ из командной строки.

Канонический URL: https://lagune.ai/ru-RU/docs/hooks/cors
Язык: ru-RU
Оригинал: https://lagune.ai/docs/hooks/cors
Последнее обновление: 2026-11-03

Хук `cors` представляет собой детерминированный движок, стоящий за [специализацией `http-request`](https://lagune.ai/ru-RU/docs/catalog), и вы можете запускать его сами. Он работает в двух режимах одной командой: **сканирование** проверяет исходный код на **обходимый список разрешенных источников** (регулярное выражение для проверки хоста, мимо которого проскальзывает хост злоумышленника), а **оценка** присваивает отдельному значению **источника 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`. Хук выводит по одному слову на источник и завершается с ненулевым кодом при любом `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` и не шаблон с `*`. Корректность формы источника не гарантируется.                    |
| `wildcard` | `*` или шаблон поддомена, хоста или порта: ответ может прочитать любой сайт (или широкий круг сайтов). |
| `null`     | Источник `null`, который могут подделать изолированные iframe и перенаправления.                       |

Разрешением считается только `safe`, а `--origin` служит оракулом значений: он оценивает значение, а не обработчик, поэтому обработчик подтвердите с помощью специализации `http-request`.

### Параметры CLI

| Параметр   | Значение   | Описание                                                                                    |
| ---------- | ---------- | ------------------------------------------------------------------------------------------- |
| `--origin` | источник   | Оценивает одно значение источника. Повторите, чтобы оценить несколько, по одному на строку. |
| `--dir`    | директория | Ограничивает сканирование директорией. Можно повторять и сочетать с `--file`.               |
| `--file`   | файл       | Ограничивает сканирование одним файлом. Можно повторять и сочетать с `--dir`.               |

Без параметров хук сканирует весь проект. `--origin` включает режим оценки и не сочетается с `--dir` или `--file`.

**Чего он не охватывает**

Сканирование распознает форму **обходимого регулярного выражения**, а `--origin` оценивает **значения** источников. Два шаблона на уровне исходного кода остаются вне досягаемости: отражение заголовка `Origin` из запроса (сервер возвращает входящий `Origin` обратно или сочетает его с учетными данными) и слишком мягкий список разрешенных источников на основе `endsWith` или поиска подстроки. Распознавайте их в коде и обрабатывайте так, как описывает [специализация `http-request`](https://lagune.ai/ru-RU/docs/catalog).

## Частые вопросы

### Чем опасен источник CORS null?

Изолированные iframe и некоторые перенаправления отправляют Origin: null, поэтому список разрешенных источников, доверяющий null, дает этим контекстам доступ на чтение. Хук cors помечает его наравне с wildcard.

### Как поймать обходимый список разрешенных источников CORS?

Запустите npx lagune read cors по кодовой базе. Хук помечает регулярное выражение для проверки хоста, у которого жадный шаблон стоит перед доверенным суффиксом, из-за чего хост злоумышленника вроде your-site.com.attacker.com проскальзывает мимо.
