You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Хранится в глобальной переменной процесса (ACCESS_TKN_ESIA).
Используется как Authorization: Bearer ... для всех вызовов svcdev_host.
Срок действия (exp) парсится без верификации подписи (_decode_jwt_exp) и возвращается клиенту вместе с токеном, а также доступен через GET /version (поле runtime.access_tkn_exp).
На фронтенде декодируется только для отображения exp (никакой верификации - JWT подписывает ЕСИА).
Угрозы и меры
Угроза
Оценка
Меры
Утечка KeyPin через env
высокая
Использовать Docker secrets / Vault в prod
Утечка приватного ключа (volume)
высокая
Шифровать том, ограничить FS-права, не коммитить xxx.000
CSRF на backend
средняя
CORS управляется env ALLOWED_ORIGINS (см. .env.example); в prod указать конкретный домен фронта, дополнительно - CSRF-токен при необходимости
MITM к ЕПГУ
низкая
Только HTTPS + корневой CA
Повторная подача/replay
средняя
ЕПГУ отвечает дедупликацией по orderId; на стороне системы - идемпотентные ключи
Отсутствие аудита
средняя
Логировать все операции подписания с указанием пользователя/ключа
XXE / billion laughs
средняя
lxml.etree.fromstring без отключения внешних сущностей - рассмотреть XMLParser(resolve_entities=False)
Логирование PII
средняя
Не логировать тело заявления/PII в prod; маскировать
Реализовано в коде (2026-05)
Безопасный парсер XML: XMLParser(resolve_entities=False, no_network=True, huge_tree=False) в validate_xml_content (см. app.py).
Парсинг exp JWT: _decode_jwt_exp -> возвращается клиенту и через /version.
CORS через env ALLOWED_ORIGINS (список доменов через запятую или *).
Разделение certs/public/ (в git) и certs/personal/ (gitignored).
Дальнейшие рекомендации
Перенести глобальное состояние в защищённое хранилище (Redis с TTL на токен).
Авто-обновление токена при приближении exp (сейчас обновление инициирует клиент).
Аудит операций подписания (кто, когда, какой сертификат, хэш данных).
KeyPin - через Docker secrets / Vault вместо env.
Сертификаты CA
В backend-образ устанавливается test_ca_rtk3.cer (certenroll.test.gosuslugi.ru).
Для прод-контура заменить на действующие корневые сертификаты Минцифры / ФСБ (ГОСТ TLS) - публикуются в составе дистрибутива КриптоПро и в реестре доверенных корневых ЦА.
Все публичные CA должны лежать в api-gosuslugi-backend/certs/public/ (видны в репозитории), личные ключи и сертификаты - в certs/personal/ (gitignored).
Регламентные требования к ИС перед прод-эксплуатацией
Сверено с разделом «Регламентные требования» референсной реализации go-api-epgu и регламентом подключения v1.4 (09.11.2022).