Metadata-Version: 2.5
Name: suveren
Version: 2.2.3
Summary: Аудит сайта и компании: иностранные сервисы, 152-ФЗ, блокировки РКН, ЕГРЮЛ и санкционные списки
Project-URL: Homepage, https://github.com/marsilid/suveren
Project-URL: Documentation, https://github.com/marsilid/suveren/blob/main/docs/guide.md
Project-URL: Changelog, https://github.com/marsilid/suveren/blob/main/CHANGELOG.md
Project-URL: Issues, https://github.com/marsilid/suveren/issues
License-Expression: AGPL-3.0-or-later
License-File: COPYRIGHT
License-File: LICENSE
Keywords: 152-fz,compliance,egrul,import-substitution,ofac,osint,russia,sanctions
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Information Technology
Classifier: Natural Language :: Russian
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Internet :: Name Service (DNS)
Classifier: Topic :: Security
Requires-Python: >=3.11
Requires-Dist: certifi>=2026.10.19
Requires-Dist: cryptography>=42
Requires-Dist: dnspython>=2.9
Requires-Dist: httpx>=0.27
Requires-Dist: jinja2>=3.1
Requires-Dist: rich>=13.7
Requires-Dist: typer>=0.12
Provides-Extra: browser
Requires-Dist: playwright>=1.45; extra == 'browser'
Provides-Extra: dev
Requires-Dist: coverage>=7.5; extra == 'dev'
Requires-Dist: hypothesis>=6.100; extra == 'dev'
Requires-Dist: mypy>=1.10; extra == 'dev'
Requires-Dist: pip-audit>=2.7; extra == 'dev'
Requires-Dist: pytest>=8; extra == 'dev'
Requires-Dist: ruff>=0.5; extra == 'dev'
Description-Content-Type: text/markdown

<div align="center">

<picture>
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/marsilid/suveren/v2.2.3/docs/logo-dark.png">
  <img alt="Suveren" src="https://raw.githubusercontent.com/marsilid/suveren/v2.2.3/docs/logo-light.png" width="300">
</picture>

**Проверка сайта и компании для работы в России**<br>
иностранные сервисы · 152-ФЗ · блокировки · защита почты · безопасность · ЕГРЮЛ и санкции

[![Релиз](https://img.shields.io/github/v/release/marsilid/suveren?label=%D1%80%D0%B5%D0%BB%D0%B8%D0%B7)](https://github.com/marsilid/suveren/releases/latest)
[![PyPI](https://img.shields.io/pypi/v/suveren)](https://pypi.org/project/suveren/)
[![CI](https://github.com/marsilid/suveren/actions/workflows/ci.yml/badge.svg)](https://github.com/marsilid/suveren/actions/workflows/ci.yml)
![Python](https://img.shields.io/badge/python-3.11%E2%80%933.14-blue)
![License](https://img.shields.io/badge/license-AGPL--3.0-blue)

[Сайт](https://marsilid.github.io/suveren/) · [English version](https://github.com/marsilid/suveren/blob/v2.2.3/README.en.md)

</div>

Укажите адрес сайта, и через минуту у вас будет отчёт: что на сайте держится на иностранных
сервисах, какие требования закона нарушены и какой штраф за это грозит, можно ли подделать
письмо от имени компании и что исправить в первую очередь. Каждый вывод подкреплён
доказательством: DNS-записью, заголовком ответа, цитатой из политики, адресом скрипта.

![Suveren в терминале](https://raw.githubusercontent.com/marsilid/suveren/v2.2.3/docs/demo.svg)

<sub>На картинках — выдуманные сайты в зарезервированной зоне `.test`: это данные настоящих
проверок, в которых имена, адреса и IP заменены, чтобы не показывать чужие компании.</sub>

## Быстрый старт

**Windows.** Скачайте `Suveren.exe` со страницы
[последнего релиза](https://github.com/marsilid/suveren/releases/latest) и запустите: откроется
меню, командную строку знать не нужно, Python не нужен. Windows может предупредить о неизвестном
издателе — «Подробнее» → «Выполнить в любом случае».

**Любая система** (Python 3.11+):

```bash
python3 -m pip install "suveren[browser]"
suveren scan example.ru
```

На Windows вместо `python3` пишите `py`. Ставьте именно через `python3 -m pip`: голая команда
`pip` бывает от старого Python 2 или 3.8. Если pip отвечает `Could not find a version that
satisfies the requirement suveren` («from versions: none»), значит его Python старше 3.11:
проверьте `python3 --version` и обновите Python или скачайте готовый exe.

<details>
<summary>Другие способы: из исходного кода и Docker</summary>

Из исходного кода меню открывает `Suveren.bat`: скачайте репозиторий (Code → Download ZIP),
распакуйте и запустите батник — при первом запуске он сам установит всё нужное.

```bash
docker build -t suveren https://github.com/marsilid/suveren.git
docker run --rm -v "$PWD:/work" suveren scan example.ru
```

![Меню Suveren](https://raw.githubusercontent.com/marsilid/suveren/v2.2.3/docs/menu.svg)

</details>

## Что проверяет

- **Что отвалится при следующей волне санкций?** DNS, почта, хостинг, CDN, конструктор сайта,
  регистратор, сертификат, скрипты и виджеты. Оценка независимости от A до F и план переезда.
- **Соблюдает ли сайт 152-ФЗ?** Политика и её содержание, согласия в формах, cookies,
  трансграничная передача, реестр операторов ПДн, вход через Google и Apple, ссылки на Instagram
  и Facebook без пометки о запрете Meta. Сумма возможных штрафов по КоАП.
- **Открывается ли сайт в России?** Домен и IP-адреса в реестре блокировок, заблокированные
  сервисы на страницах.
- **Можно ли подделать письмо от имени компании?** SPF, DMARC, DKIM, MTA-STS и простой ответ: да,
  частично или нет.
- **Нет ли забытых поддоменов, которые можно захватить?**
- **Чей код выполняется на сайте?** Сторонние и брошенные скрипты, уязвимые библиотеки, ключи в
  коде, заголовки безопасности, cookies, TLS, CAA и DNSSEC.
- **С кем мы имеем дело?** Компания в ЕГРЮЛ, санкционные списки США, ЕС, Великобритании и ООН,
  перечень Росфинмониторинга.

Около 70 проверок с постоянными ID ([список](https://github.com/marsilid/suveren/blob/v2.2.3/docs/checks.md)) и база из 300 с лишним сервисов.
Находки из разных разделов собираются в сценарии атак: «почту можно подделать» + «на сайте есть
оплата» = фишинг от имени компании.

Кому пригодится: владельцам бизнеса и ИТ-директорам, веб-студиям, юристам и ответственным за
персональные данные, отделам закупок для проверки контрагентов.

## Отчёт

Отчёт сохраняется в `reports/` и сам открывается в браузере. Сверху — оценки, штрафы и что
сделать в первую очередь; под каждой проблемой — доказательство, статья закона и как исправить.
Можно сохранить ещё в PDF или Word, сделать сводку на одну страницу для руководителя или
оформить отчёт под брендом своей студии.

<picture>
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/marsilid/suveren/v2.2.3/docs/report-dark.png">
  <img alt="HTML-отчёт" src="https://raw.githubusercontent.com/marsilid/suveren/v2.2.3/docs/report-light.png">
</picture>

<details>
<summary>Раздел 152-ФЗ, проверка компании и сводка по списку сайтов</summary>

<picture>
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/marsilid/suveren/v2.2.3/docs/compliance-dark.png">
  <img alt="Проверка 152-ФЗ" src="https://raw.githubusercontent.com/marsilid/suveren/v2.2.3/docs/compliance-light.png">
</picture>

<picture>
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/marsilid/suveren/v2.2.3/docs/company-dark.png">
  <img alt="Проверка компании" src="https://raw.githubusercontent.com/marsilid/suveren/v2.2.3/docs/company-light.png">
</picture>

<picture>
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/marsilid/suveren/v2.2.3/docs/batch-dark.png">
  <img alt="Сводка по списку сайтов" src="https://raw.githubusercontent.com/marsilid/suveren/v2.2.3/docs/batch-light.png">
</picture>

</details>

## Главные команды

```bash
suveren scan сайт.ru                    # обычная проверка, около 20 секунд
suveren scan сайт.ru --profile deep     # глубокая: браузер, до 12 страниц, отключение сервисов
suveren scan сайт.ru --pdf отчёт.pdf    # то же и PDF; --docx — Word, --summary — для руководителя
suveren company 7707083893              # компания по ИНН, ОГРН или адресу сайта
suveren batch sites.txt                 # список сайтов: сводная таблица, CSV и отчёт по каждому
suveren watch sites.txt --every 24h     # следить за сайтами; изменения можно получать в Telegram
suveren research sites.txt             # исследование: только доли сайтов с каждой находкой
suveren scan сайт.ru -v                 # каждый сетевой шаг со временем: видно, где зависает
suveren scan сайт.ru --dkim-selector ew # проверить и ваш селектор DKIM, а не только типовые
```

Все команды и параметры — в [руководстве](https://github.com/marsilid/suveren/blob/v2.2.3/docs/guide.md#все-команды), а также в
`suveren --help` и `suveren scan --help`.

## Что Suveren делает с сайтом

Suveren в основном смотрит то же, что любой посетитель: публичные DNS-записи, открытые реестры и
страницы сайта. Никакого сканирования портов и подбора паролей.

- **`company` по ИНН или ОГРН** к сайту не обращается: только ЕГРЮЛ, реестры и санкционные
  списки. По адресу сайта он открывает главную страницу, чтобы найти на ней ИНН.
- **`scan`** открывает главную и до 6 внутренних страниц. В двух местах он прощупывает: пробует
  соединиться по устаревшим TLS 1.0 и 1.1 и открывает страницы поддоменов, которые ведут на
  внешние сервисы. Сайт видит ваш IP, как при обычном заходе.
- **`--browser` и `--profile deep`** открывают страницы в браузере, и на вашем компьютере
  выполняется JavaScript сайта. Браузер работает в песочнице, ему закрыты адреса вашей сети и
  загрузка файлов.
- **`--own-site`** глубже проверяет **свой** сайт: служебные файлы `.git` и `.env`, шифры TLS,
  почтовые серверы, а с `--form-leaks` — утечки данных из форм. Запускается только после
  подтверждения владения (`suveren verify`).

У каждой проверки в [docs/checks.md](https://github.com/marsilid/suveren/blob/v2.2.3/docs/checks.md) указано, что она делает с сайтом и чем
рискует тот, кто её запускает. Куда уходят данные при `--dns ru` — в
[руководстве](https://github.com/marsilid/suveren/blob/v2.2.3/docs/guide.md#параметры-проверки), чем рискуют плагины — в [docs/plugins.md](https://github.com/marsilid/suveren/blob/v2.2.3/docs/plugins.md).

## Для CI

```bash
suveren scan example.ru --no-open --sarif suveren.sarif --fail-on fail
```

SARIF читают GitHub и GitLab code scanning и DefectDojo. Находку, которую решили пока не
исправлять, можно принять в `.suveren-ignore` с причиной, автором и сроком: она остаётся в
отчёте, но не валит сборку, а после срока снова считается. Подробнее — в
[руководстве](https://github.com/marsilid/suveren/blob/v2.2.3/docs/guide.md#ci-и-другие-инструменты).

## Источники данных и ограничения

Все источники открытые и бесплатные, ключи API не нужны: DNS, RDAP и WHOIS, ЕГРЮЛ, реестр
операторов ПДн, выгрузка реестра блокировок от antifilter.download, журналы сертификатов,
санкционные списки, база уязвимых библиотек retire.js, база расположения серверов
[IP Geolocation by DB-IP](https://db-ip.com) (CC BY 4.0, скачивается раз в месяц).
`suveren doctor` проверяет, что все они отвечают.

Отчёт помогает расставить приоритеты и **не является юридическим заключением**: у каждой
проверки 152-ФЗ указана статья закона со ссылкой на текст. Где проверить не удалось, Suveren
пишет «не проверено», а не ложное «в порядке». Все ограничения — в
[руководстве](https://github.com/marsilid/suveren/blob/v2.2.3/docs/guide.md#ограничения).

## Участие

Чтобы добавить сервис в базу, программировать не нужно: это файл
[`services.json`](https://github.com/marsilid/suveren/blob/v2.2.3/src/suveren/data/services.json), как его заполнить — в
[руководстве](https://github.com/marsilid/suveren/blob/v2.2.3/docs/guide.md#как-добавить-сервис-в-базу). Можно и просто открыть issue
«Добавить сервис». Как устроен код и как запускать тесты — в [CONTRIBUTING.md](https://github.com/marsilid/suveren/blob/v2.2.3/CONTRIBUTING.md),
об уязвимостях — по правилам [SECURITY.md](https://github.com/marsilid/suveren/blob/v2.2.3/SECURITY.md).

## Лицензия

[GNU AGPL-3.0](https://github.com/marsilid/suveren/blob/v2.2.3/LICENSE) или более поздняя, начиная с версии 1.1: код открыт, и любая изменённая
версия, в том числе работающая как сервис, тоже должна быть открыта. Для закрытых продуктов и
SaaS есть коммерческая лицензия — подробности в [COPYRIGHT](https://github.com/marsilid/suveren/blob/v2.2.3/COPYRIGHT). Версии до 1.0.x остаются
под MIT.

Связанный проект: [ReconLens](https://github.com/marsilid/reconlens) — пассивная OSINT-разведка
домена с оценкой безопасности.
