Если секреты хранятся в JavaScript на стороне клиента, они уже не секреты. Любой пользователь может открыть DevTools и увидеть ключи, токены или приватные URL.

Это может привести к расходу лимитов, утечке данных, действиям от имени проекта и блокировке внешнего сервиса.

Коротко: секретные ключи должны жить на сервере, а frontend должен обращаться к безопасному backend-слою.

Почему это происходит

Проблема появляется, когда frontend напрямую обращается к API, который требует приватный ключ, или когда env-переменные сборки ошибочно считают защищенными после попадания в bundle.

Что проверить сначала

  • есть ли ключи в исходном HTML или JS bundle
  • какие API вызываются напрямую из браузера
  • можно ли ограничить ключ доменом
  • нужна ли ротация уже раскрытого секрета
  • какие права есть у ключа

Как я решаю такую задачу

Я сначала оцениваю масштаб утечки, затем переношу опасные операции на backend и ограничиваю права ключей.

  • нахожу секреты в frontend
  • определяю, что уже нужно перевыпустить
  • создаю backend endpoint или proxy
  • ограничиваю ключи по правам и доменам
  • проверяю, что bundle больше не содержит секреты

Что подготовить

  • ссылку на сайт или репозиторий
  • какие сервисы подключены
  • где используются ключи
  • доступ к backend или хостингу
  • какие ключи можно перевыпустить

Каким должен быть результат

После исправления frontend не должен содержать приватные ключи, а все опасные запросы должны проходить через backend с проверками и логами.

Чего лучше не делать

Не считайте переменные сборки секретными, если они попадают в клиентский bundle. В браузере их можно увидеть.

FAQ

Можно ли хранить публичный ключ?

Да, если сервис специально выдает public key с ограниченными правами.

Нужно ли менять уже засвеченный ключ?

Да, если это приватный ключ или токен с доступом к данным.

Помогает ли минификация?

Нет, она не защищает секреты.

Что делать с картами и виджетами?

Использовать публичные ключи с ограничением по домену и лимитам.

Нужна похожая задача?

Напишите в Telegram @rabotator_support или оставьте заявку на сайте. Коротко опишите проблему, приложите ссылку или пример ошибки, и я скажу, как безопасно подойти к исправлению.

Итог

Секреты в клиентском JavaScript - это не мелкая недоработка, а реальный риск, который нужно закрывать архитектурно.