[{"data":1,"prerenderedAt":179},["ShallowReactive",2],{"publication:ru:P079":3},{"meta":4,"copy":17,"relatedArticles":149,"terms":171,"term":172,"resourceParent":173,"glossaryParent":176},{"id":5,"path":6,"kind":7,"keyword":8,"title":9,"seoTitle":10,"description":11,"incoming":12,"updated":15,"preparedOn":16},"P079","\u002Fblog\u002Fapi-keys-secrets","article","как хранить API ключи на сайте","Как хранить API-ключи на сайте и действовать при раскрытии","Как хранить API-ключи на сайте: секреты и доступ","Где хранятся ключи, кто их использует и что попадает в браузер, сборку или журналы. Различия публичного идентификатора, секрета и безопасной ротации.",[13,14],"\u002Fservices\u002Fcrm-integrations","\u002Fservices\u002Fsecurity-audit","2026-07-10","2026-10-31",{"intro":18,"sections":19,"checklistTitle":103,"checklist":104,"faq":111,"sources":121,"links":124,"cta":144},"Хранить API-ключи на сайте нужно по их назначению: секретные учетные данные остаются в согласованной серверной области, а в браузер передают только явно предназначенные поставщиком публичные идентификаторы. Проверьте исходный код, сборки, журналы, доступы и процесс замены. Переменная окружения не скрывает секрет, если ее значение попадает в клиентский пакет.",[20,30,40,76,84,98],{"title":21,"paragraphs":22,"sources":26},"Сначала определите тип и полномочия ключа",[23,24,25],"Название API key не задает одинаковую секретность у всех поставщиков. Нужно знать тип, аккаунт, окружение и доступные действия. Ключ для рабочего сервиса и учебного режима может иметь разную область, а секрет подписи вебхука является отдельным объектом.","Stripe различает publishable, secret и restricted ключи. Публичный вариант предназначен для определенных клиентских сценариев, а ограниченный серверный ключ не становится публичным из-за меньших прав. Для другого провайдера используйте его собственные определения и актуальную документацию.","Составьте реестр без самих значений: владелец, назначение, потребитель, разрешения, окружение и способ отзыва. Не присылайте секреты в обычную форму и не копируйте их в рабочую таблицу для удобства описания задачи.",[27],{"label":28,"url":29},"Stripe: публичные, секретные и ограниченные API-ключи","https:\u002F\u002Fdocs.stripe.com\u002Fkeys",{"title":31,"paragraphs":32,"sources":36},"Путь от исходника до браузера и журналов",[33,34,35],"Секрет может раскрыться не только в файле исходного кода. Значение бывает встроено в статическую сборку, публичную конфигурацию, образ, диагностический вывод, скриншот или архив. Отдельно проверьте, какая часть данных реально доступна пользователю браузера.","Перенос строки в переменную окружения не гарантирует безопасность. Значение может попасть в клиентский пакет при сборке или быть доступно лишним процессам и журналам. Нужны поддерживаемый серверный путь, ограничения доступа и отсутствие ненужного раскрытия.","OWASP рассматривает управление секретами как жизненный цикл и описывает ограничения разных способов передачи в окружение. Выбирайте механизм по своей платформе, а не считайте любой файл с названием env универсальным защищенным хранилищем.",[37],{"label":38,"url":39},"OWASP: жизненный цикл и защита секретов","https:\u002F\u002Fcheatsheetseries.owasp.org\u002Fcheatsheets\u002FSecrets_Management_Cheat_Sheet.html",{"title":41,"paragraphs":42,"table":45},"Карта хранения и потребителей",[43,44],"Следующая таблица является рабочим шаблоном CyberFixCrew. Она помогает найти владельца и границу проверки, не собирая сами ключи в отчет. Это не результат поиска секретов в клиентском проекте и не рекомендация одной технологии для всех систем.","Для каждого потребителя определите необходимые права и независимость учебного режима. Общий секрет многих интеграций затрудняет ограниченный отзыв. Если поддерживается отдельный ключ с нужной областью, его применение согласуют с владельцем сервиса.",{"caption":46,"headers":47,"rows":51},"Где искать границу раскрытия API-ключа",[48,49,50],"Место или этап","Что проверить","Нужный результат",[52,56,60,64,68,72],[53,54,55],"Исходный код","Нет ли серверного секрета в файлах проекта?","Разрешенный поддерживаемый источник значения",[57,58,59],"Сборка и браузер","Какая конфигурация доставляется посетителю?","Только предназначенные публичные данные",[61,62,63],"Серверный потребитель","Какие операции и аккаунт доступны?","Минимально нужные права",[65,66,67],"Журналы и диагностика","Не выводится ли значение или его копия?","Полезные события без секретов",[69,70,71],"Учебная среда","Не использует ли рабочие полномочия?","Изолированный разрешенный путь",[73,74,75],"Замена и отзыв","Кто обновляет всех потребителей?","Приемка и прекращение старого доступа",{"title":77,"paragraphs":78,"sources":82},"Что делать при возможном раскрытии",[79,80,81],"Установите тип ключа, его область и наблюдаемые места раскрытия. Уполномоченный владелец оценивает доступную историю и необходимость срочного ограничения. Нельзя объявлять отсутствие чужого использования только потому, что его не видно в доступном журнале.","Удаление строки из текущего файла не отменяет уже раскрытый секрет. Копии могут оставаться в истории, сборках и чужом доступе. Требуется поддерживаемая замена или отзыв и проверка потребителей, а очистка доступных артефактов является отдельной задачей.","Условный пример: секрет убран из исходника, но старая клиентская сборка еще доступна. Изменился один файл, доступ к прежнему значению не закрыт. Пример вымышленный: реальные ключи, репозитории и рабочие аккаунты не исследовались.",[83],{"label":38,"url":39},{"title":85,"paragraphs":86,"steps":90,"sources":96},"Ротация зависит от провайдера и срочности",[87,88,89],"Для плановой замены составьте перечень потребителей, поддерживаемую процедуру, приемку нового ключа и условие прекращения старого. Возможность периода совместной работы зависит от провайдера. Нельзя обещать одинаковое перекрытие для любого API или секрета подписи.","При подтвержденном опасном раскрытии скорость ограничения может быть важнее обычного комфортного перехода. Решение принимает уполномоченный владелец с учетом последствий. Не сохраняйте старый секрет бесконечно только потому, что часть зависимостей еще неизвестна.","Stripe описывает отдельные действия жизненного цикла своих ключей; они не заменяют правила других сервисов. После замены проверьте нужную интеграцию и отсутствие прежнего использования в доступной области. Не выполняйте реальную транзакцию или массовую отправку ради проверки.",[91,92,93,94,95],"Установить тип, владельца и потребителей.","Согласовать срочность и поддерживаемый порядок.","Подготовить новое значение в разрешенном серверном пути.","Принять безопасные рабочие сценарии.","Отозвать прежнее по плану и проверить ограничения.",[97],{"label":28,"url":29},{"title":99,"paragraphs":100},"Поддержка и передача управления",[101,102],"Реестр пересматривают при смене подрядчика, приложения, окружения и владельца сервиса. В отчет включают факт замены, область и приемку, а не сами значения. У компании должен быть понятный защищенный путь восстановления управления.","CyberFixCrew - израильская компания по защите сайтов и цифровой инфраструктуры. Помогаем русскоязычным бизнесам по всему миру связывать израильские знания в области кибербезопасности с управлением доступами и интеграциями. Чтобы начать обсуждение, достаточно назвать сервис, окружение и проблему; сами значения ключей в форму обращения передавать не нужно.","Безопасное управление API-ключами сайта",[105,106,107,108,109,110],"Известны тип, провайдер, аккаунт и окружение.","Публичный идентификатор отделен от серверного секрета.","Проверены пути в сборку, браузер и журналы.","Права и потребители имеют владельцев.","Замена учитывает поддержку провайдера и срочность.","Приемка и отзыв не требуют опасных реальных операций.",[112,115,118],{"question":113,"answer":114},"Можно ли спрятать секрет в JavaScript или публичной переменной?","Если значение доставляется в браузер, его нельзя считать скрытым серверным секретом. Название переменной и минификация не меняют эту границу. В клиент передают только предназначенные поставщиком публичные данные, а секретный потребитель остается в согласованной серверной области.",{"question":116,"answer":117},"Restricted API-ключ можно публиковать?","Меньшие права не делают серверный ключ публичным. Следуйте определению конкретного провайдера и ограничивайте нужную область. В частности, Stripe различает publishable и restricted ключи с разными условиями использования.",{"question":119,"answer":120},"Достаточно удалить раскрытый ключ из последнего коммита?","Это не отзывает прежний доступ и не стирает все копии. Уполномоченный владелец должен рассмотреть поддерживаемую замену или отзыв, потребителей и доступную историю. Очистка артефактов и прекращение действия секрета являются отдельными задачами.",[122,123],{"label":28,"url":29},{"label":38,"url":39},[125,127,130,133,136,139,141],{"path":13,"label":126},"Работы с приложениями и CRM",{"path":128,"label":129},"\u002Fglossary\u002Fleast-privilege","Права ключа по рабочей задаче",{"path":131,"label":132},"\u002Fblog\u002Fwebhook-security","Секреты подписи и обработка уведомлений",{"path":134,"label":135},"\u002Fblog\u002Fwp-staging-vs-production","Разделение учебных и рабочих путей",{"path":137,"label":138},"\u002Fblog\u002Femployee-offboarding-access","Передача учетных данных при уходе",{"path":14,"label":140},"Согласовать проверку области раскрытия",{"path":142,"label":143},"\u002Fglossary\u002Fssrf","Назначение серверного запроса и SSRF",{"title":145,"description":146,"button":147,"type":148},"Уточним путь ключа и владельцев интеграции","Опишите сервис, окружение и симптом без значений ключей. Согласуем область, потребителей и безопасную приемку.","Обсудить защиту API-ключей","check",[150,157,164],{"id":151,"path":131,"title":152,"description":153,"category":154,"artwork":154,"order":155,"publishedOn":156},"P080","Безопасность вебхуков: подпись, повторы и результат обработки","Чек-лист вебхуков: схема подписи провайдера, исходное тело, срок, дубликаты, порядок, надежная обработка и проверка делового результата.","integrations",86,"2026-06-24",{"id":158,"path":159,"title":160,"description":161,"category":154,"artwork":154,"order":162,"publishedOn":163},"P196","\u002Fblog\u002Fthird-party-script-data-flow","Сторонние скрипты и данные сайта: что уходит из браузера","Как проверить теги, виджеты и маршруты данных браузера. Различия CSP, SRI, согласия на обработку и фактических полномочий кода.",77,"2026-06-08",{"id":165,"path":166,"title":167,"description":168,"category":154,"artwork":154,"order":169,"publishedOn":170},"P119","\u002Fblog\u002Fapi-security-business-checklist","Чек-лист безопасности API для бизнес-интеграций","Учетные записи, права на записи и действия, ограничения ресурсов, секреты и webhooks. План контролируемой приемки с вымышленными данными.",69,"2026-05-23",[],null,{"path":174,"label":175},"\u002Fresources","Материалы и шаблоны безопасности сайта",{"path":177,"label":178},"\u002Fglossary","Словарь кибербезопасности для бизнеса",1794134065233]