Мне стало интересно, насколько российские сайты в 2026 году ещё зависят от зарубежных сервисов. Не в смысле «пользуется ли компания Zoom», а буквально: что сломается у сайта, если завтра иностранный провайдер отключит российских клиентов. Вручную такое проверять долго, поэтому я написал для этого открытую утилиту и прогнал через неё 50 сайтов: банки, магазины, операторов связи, авиакомпании, доставку, онлайн‑школы и несколько госсайтов. Спойлер: серверы почти все уже перевезли, а вот «мелочи» вроде сертификатов, аналитики и шрифтов остались.

Зачем это вообще проверять

Последние годы показали, что иностранный сервис может отвалиться в любой момент. В 2022 году регистратор Namecheap перестал обслуживать клиентов из России. Иностранные удостоверяющие центры отзывали сертификаты у российских организаций. YouTube в России сильно замедлен, и встроенное видео на сайте у многих посетителей просто не грузится.

Есть и юридическая сторона. С 1 марта 2023 года о трансграничной передаче персональных данных нужно заранее уведомлять Роскомнадзор. А любой Google Analytics, Google Fonts или reCAPTCHA на сайте отправляет IP‑адрес посетителя на зарубежные серверы. Многие владельцы сайтов об этом даже не задумываются: подключили счётчик пять лет назад и забыли.

Отсюда вопрос: как быстро понять, что из всего этого касается конкретного сайта? Готового бесплатного инструмента я не нашёл и решил сделать свой.

Что получилось на 50 сайтах

Я взял 50 сайтов крупных российских компаний и госорганов и проверил каждый в браузерном режиме: главную страницу и ещё несколько внутренних (контакты, доставка, оплата и так далее). Названия компаний из выборки приводить не буду: проверка автоматическая и может ошибаться, а цель не в том, чтобы кого‑то пристыдить. Примеры в репозитории сделаны на нескольких известных сайтах, это демонстрация, а не результаты исследования.

За каждую найденную иностранную зависимость утилита снимает баллы и ставит оценку от A до F. Распределение получилось такое:

Оценка

Сайтов

A

19

B

19

C

5

D

6

F

1

Сертификаты. Иностранный SSL‑сертификат у 43 сайтов из 50. Чаще всего это бельгийский GlobalSign (29 сайтов) и американский Let's Encrypt (12). Сертификат российского НУЦ Минцифры стоит только у 4 сайтов. Это самая массовая зависимость, но и самая вынужденная: сертификату НУЦ не доверяют Chrome, Firefox и Safari, так что совсем без иностранного центра сайт у большинства посетителей откроется с ошибкой. Поэтому важно не избавиться от него, а быть готовым быстро сменить. Главный риск тут даже не отзыв, а отказ в продлении: сертификат Let's Encrypt живёт 90 дней, и если выпуск настроен вручную, сайт перестанет открываться, как только срок закончится.

Аналитика и реклама. Иностранные счётчики стоят у 17 сайтов, и почти всегда это Google Analytics или Google Tag Manager (16 сайтов). Самое забавное: у 9 сайтов на страницах до сих пор есть скрипты Google Ads и AdSense, хотя Google прекратил показ рекламы в России ещё в 2022 году. Скорее всего, их просто забыли убрать.

Шрифты, капча, видео. Google Fonts грузится у 8 сайтов, Google reCAPTCHA стоит у 4, встроенный YouTube — у 3. Каждый такой скрипт передаёт данные посетителя за рубеж.

Почта и DNS. Почта у иностранного провайдера у 11 сайтов, из них у пяти Google Workspace. DNS у зарубежных провайдеров у 8.

Хостинг. А вот здесь почти полный порядок: сервер за рубежом нашёлся только у одного сайта из 50. Сайты за CDN вроде Cloudflare утилита считает отдельно: в этом случае настоящий сервер скрыт, и иностранным оказывается CDN, а не хостинг.

Конструкторы. 4 сайта из выборки сделаны на Tilda. Её создала российская команда, но сеть, на которой работают сайты, зарегистрирована на компанию в ОАЭ.

Ещё интересная цифра: у 17 сайтов нет никаких иностранных зависимостей, кроме сертификата. То есть крупный бизнес серьёзную инфраструктуру уже перевёз, а остались мелочи, которые проще всего упустить. И как раз эти мелочи отвечают за передачу данных посетителей за рубеж.

Как устроен инструмент

Утилита называется Suveren, она написана на Python и лежит на GitHub под лицензией MIT. Расскажу про несколько вещей, которые оказались интереснее, чем я думал.

Страна сервиса — это не страна дата‑центра

Первое, что пришлось решить: что считать «иностранным». Сервер Hetzner может стоять в Финляндии, но компания немецкая, а санкции применяются к компании, а не к стойке в дата‑центре. Поэтому страной сервиса я считаю юрисдикцию владельца.

Чтобы узнать, кому принадлежит IP‑адрес, не нужны никакие ключи API. Есть бесплатный сервис Team Cymru, который отвечает прямо через DNS. Переворачиваешь IP задом наперёд и делаешь TXT‑запрос:

$ dig +short TXT 8.8.8.8.origin.asn.cymru.com.
"15169 | 8.8.8.0/24 | US | arin | 2023-12-28"

(У адреса 8.8.8.8 перевёрнутая запись совпадает с прямой, поэтому пример такой удобный.)

В ответе номер автономной системы (сети) и страна. Вторым запросом по номеру сети получаем название владельца. Дальше уже дело базы.

База сервисов

Сейчас в базе около 200 сервисов, иностранных и российских. Каждый описывается одной записью: по каким следам его узнать. Например:

Service(
    "Hetzner",
    "DE",                    # страна компании
    ns=("hetzner.com",),     # так выглядят его DNS-серверы
    mx=("your-server.de",),  # так выглядят его почтовые серверы
    asn=(24940,),            # номер его сети
)

Для скриптов на странице задаются регулярные выражения: mc.yandex.ru — это Яндекс Метрика, googletagmanager.com — Google Analytics и так далее. Российские сервисы тоже есть в базе, чтобы в отчёте была полная картина, а не только «плохое».

Сайты, которые не хотят, чтобы их проверяли

Первая версия просто скачивала главную страницу и искала на ней всё нужное. На маленьких сайтах это работало, а на крупных утилита радостно сообщала, что у сайта нет политики конфиденциальности. Это была неправда: крупные сайты либо отдают роботу страницу «подтвердите, что вы не робот», либо пустую заготовку, которую потом достраивает JavaScript.

Пришлось сделать две вещи. Во‑первых, научить утилиту распознавать такие заглушки и честно писать «не удалось проверить» вместо ложной ошибки. Во‑вторых, добавить режим, в котором сайт открывается в настоящем браузере через Playwright. Отдельно скачивать браузер не нужно: используется Edge или Chrome, которые уже стоят в системе.

Браузерный режим неожиданно оказался намного полезнее, чем я ожидал. Он видит все запросы, которые делает страница, включая скрипты, подгруженные через менеджеры тегов. Например, у одного крупного онлайн‑кинотеатра так нашёлся пиксель TikTok, которого в исходном HTML нет вообще.

Санкционные списки и транслитерация

Утилита умеет проверять и компании: по ИНН берёт данные из ЕГРЮЛ и ищет компанию и её руководителя в санкционных списках США, ЕС и Великобритании. Все три списка открытые.

С ИНН всё просто: во многих записях он указан, и совпадение точное. А вот с названиями пришлось повозиться. В российском реестре компания называется «ПАО „СБЕРБАНК РОССИИ“», а в американском списке «Public Joint Stock Company Sberbank of Russia». Я сделал нормализацию: транслитерация, выкидывание организационно‑правовых форм и сравнение по «скелету» слова из первой буквы и согласных. Так эти два названия сходятся.

Для людей тот же приём сработал плохо. При тестах «Любимов Олег» совпал с «Любимовой Ольгой» из санкционного списка: без гласных окончания и пол теряются. Для ФИО пришлось сделать отдельное, более строгое сравнение, а все совпадения по имени утилита помечает как «возможные»: однофамильцев никто не отменял.

Как одно регулярное выражение повесило проверку

Эту историю хочется рассказать отдельно. Когда я запустил проверку 50 сайтов, через 10 минут было готово только 6. При этом по отдельности каждый сайт проверялся секунд за тридцать.

Сначала я думал на сеть, потом на браузер. Оказалось, ни то ни другое. В базе было несколько шаблонов вот такого вида:

r"[\w.-]*adriver\.ru"

Выглядит безобидно. Но если на странице есть длинная строка без пробелов (а в минифицированном JavaScript таких полно), регулярка начинает перебор с каждой позиции и работает квадратично. Я замерил: на строке в 20 тысяч символов один такой шаблон думал 2 секунды, на строке в 200 тысяч — уже минуты. И всё это время программа стояла, потому что вычисление блокировало весь цикл событий.

Исправление оказалось смешным: убрать ведущий [\w.-]* и искать просто adriver\.ru. Результат тот же, а работает мгновенно. Плюс я добавил тест, который прогоняет все шаблоны базы по строке из 100 тысяч символов и падает, если это занимает больше секунды. После этого 50 сайтов проверились за 5 минут вместо часа с лишним.

Что ещё умеет

Коротко, чтобы не превращать статью в документацию:

  • проверка по 152-ФЗ: политика конфиденциальности, согласие в формах, уведомление о cookies, трансграничная передача, где хранятся данные; у каждого вывода указана статья закона со ссылкой на текст;

  • проверка по реестру блокировок Роскомнадзора;

  • проверка компании по ИНН: ЕГРЮЛ, реестр операторов персональных данных, санкционные списки;

  • массовая проверка списка сайтов со сводной таблицей и CSV (это для веб‑студий);

  • сравнение двух проверок, чтобы видеть, как идёт переезд на российские сервисы.

Ограничения

Хочу сразу честно сказать, чего утилита не умеет:

  • проверяется главная страница и несколько внутренних, а не весь сайт;

  • часть сайтов закрыта от ботов даже для браузера, тогда в отчёте будет «не проверено»;

  • проверка по 152-ФЗ идёт по признакам на страницах и не заменяет юриста;

  • совпадения по названию и ФИО в санкционных списках нужно перепроверять руками.

Попробовать

Код открытый: https://github.com/marsilid/suveren

Для Windows есть готовый Suveren.exe в разделе Releases: скачать и запустить двойным кликом, откроется меню. Exe собирается автоматически в GitHub Actions из исходников репозитория, так что его можно проверить. Windows может показать предупреждение SmartScreen: файл не подписан. На других системах:

pip install "suveren[browser] @ git+https://github.com/marsilid/suveren.git"
suveren scan example.ru --browser

Если утилита не узнала какой‑то сервис на вашем сайте, откройте issue “Добавить сервис” на GitHub. Там простая форма, программировать не нужно. Буду рад любым замечаниям в комментариях, особенно от тех, кто разбирается в 152-ФЗ лучше меня.

Комментарии (1)


  1. KEugene
    08.10.2026 00:11

    Утилита называется Suveren

    Iron Curtain было бы логичнее.