Центр знаний

Как хранить API-ключи на сайте и действовать при раскрытии

Хранить API-ключи на сайте нужно по их назначению: секретные учетные данные остаются в согласованной серверной области, а в браузер передают только явно предназначенные поставщиком публичные идентификаторы. Проверьте исходный код, сборки, журналы, доступы и процесс замены. Переменная окружения не скрывает секрет, если ее значение попадает в клиентский пакет.

Сначала определите тип и полномочия ключа

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

Stripe различает publishable, secret и restricted ключи. Публичный вариант предназначен для определенных клиентских сценариев, а ограниченный серверный ключ не становится публичным из-за меньших прав. Для другого провайдера используйте его собственные определения и актуальную документацию.

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

Stripe: публичные, секретные и ограниченные API-ключи

Путь от исходника до браузера и журналов

Секрет может раскрыться не только в файле исходного кода. Значение бывает встроено в статическую сборку, публичную конфигурацию, образ, диагностический вывод, скриншот или архив. Отдельно проверьте, какая часть данных реально доступна пользователю браузера.

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

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

OWASP: жизненный цикл и защита секретов

Карта хранения и потребителей

Следующая таблица является рабочим шаблоном CyberFixCrew. Она помогает найти владельца и границу проверки, не собирая сами ключи в отчет. Это не результат поиска секретов в клиентском проекте и не рекомендация одной технологии для всех систем.

Для каждого потребителя определите необходимые права и независимость учебного режима. Общий секрет многих интеграций затрудняет ограниченный отзыв. Если поддерживается отдельный ключ с нужной областью, его применение согласуют с владельцем сервиса.

Где искать границу раскрытия API-ключа
Место или этапЧто проверитьНужный результат
Исходный кодНет ли серверного секрета в файлах проекта?Разрешенный поддерживаемый источник значения
Сборка и браузерКакая конфигурация доставляется посетителю?Только предназначенные публичные данные
Серверный потребительКакие операции и аккаунт доступны?Минимально нужные права
Журналы и диагностикаНе выводится ли значение или его копия?Полезные события без секретов
Учебная средаНе использует ли рабочие полномочия?Изолированный разрешенный путь
Замена и отзывКто обновляет всех потребителей?Приемка и прекращение старого доступа

Что делать при возможном раскрытии

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

Удаление строки из текущего файла не отменяет уже раскрытый секрет. Копии могут оставаться в истории, сборках и чужом доступе. Требуется поддерживаемая замена или отзыв и проверка потребителей, а очистка доступных артефактов является отдельной задачей.

Условный пример: секрет убран из исходника, но старая клиентская сборка еще доступна. Изменился один файл, доступ к прежнему значению не закрыт. Пример вымышленный: реальные ключи, репозитории и рабочие аккаунты не исследовались.

OWASP: жизненный цикл и защита секретов

Ротация зависит от провайдера и срочности

Для плановой замены составьте перечень потребителей, поддерживаемую процедуру, приемку нового ключа и условие прекращения старого. Возможность периода совместной работы зависит от провайдера. Нельзя обещать одинаковое перекрытие для любого API или секрета подписи.

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

Stripe описывает отдельные действия жизненного цикла своих ключей; они не заменяют правила других сервисов. После замены проверьте нужную интеграцию и отсутствие прежнего использования в доступной области. Не выполняйте реальную транзакцию или массовую отправку ради проверки.

  1. Установить тип, владельца и потребителей.
  2. Согласовать срочность и поддерживаемый порядок.
  3. Подготовить новое значение в разрешенном серверном пути.
  4. Принять безопасные рабочие сценарии.
  5. Отозвать прежнее по плану и проверить ограничения.
Stripe: публичные, секретные и ограниченные API-ключи

Поддержка и передача управления

Реестр пересматривают при смене подрядчика, приложения, окружения и владельца сервиса. В отчет включают факт замены, область и приемку, а не сами значения. У компании должен быть понятный защищенный путь восстановления управления.

CyberFixCrew - израильская компания по защите сайтов и цифровой инфраструктуры. Помогаем русскоязычным бизнесам по всему миру связывать израильские знания в области кибербезопасности с управлением доступами и интеграциями. Чтобы начать обсуждение, достаточно назвать сервис, окружение и проблему; сами значения ключей в форму обращения передавать не нужно.

Официальная документация и источник: Stripe: публичные, секретные и ограниченные API-ключиОфициальная документация и источник: OWASP: жизненный цикл и защита секретов

Ответы на вопросы

Вопросы по теме

Можно ли спрятать секрет в JavaScript или публичной переменной?

Если значение доставляется в браузер, его нельзя считать скрытым серверным секретом. Название переменной и минификация не меняют эту границу. В клиент передают только предназначенные поставщиком публичные данные, а секретный потребитель остается в согласованной серверной области.

Restricted API-ключ можно публиковать?

Меньшие права не делают серверный ключ публичным. Следуйте определению конкретного провайдера и ограничивайте нужную область. В частности, Stripe различает publishable и restricted ключи с разными условиями использования.

Достаточно удалить раскрытый ключ из последнего коммита?

Это не отзывает прежний доступ и не стирает все копии. Уполномоченный владелец должен рассмотреть поддерживаемую замену или отзыв, потребителей и доступную историю. Очистка артефактов и прекращение действия секрета являются отдельными задачами.

ОБСУДИМ ВАШУ ЗАДАЧУ?

Уточним путь ключа и владельцев интеграции

Опишите сервис, окружение и симптом без значений ключей. Согласуем область, потребителей и безопасную приемку.

Обсудить защиту API-ключей