Skip to content

Как защитить API keys

Коротко:

API key leaks — #1 причина breach в 2026. Основные правила: 1) Никогда не commit keys в Git (используйте .env + .gitignore), 2) Rotate regularly (quarterly + on incident), 3) Scoped keys — minimum necessary permissions, 4) Secrets manager для production (Vault, AWS SM, GCP SM). GitHub Push Protection автоматически блокирует pushes с detected secrets.

Ниже: пошаговая инструкция, рабочие примеры, типичные ошибки, FAQ.

Пошаговая настройка

  1. НИКОГДА не hardcode в source code
  2. Use .env файл + добавьте в .gitignore
  3. Template: .env.example в git без actual values
  4. Production: environment variables или secrets manager
  5. Pre-commit hook: detect-secrets, git-secrets (AWS), trufflehog
  6. Git history scan: если committed случайно — git filter-branch или BFG Repo-Cleaner
  7. Scoped keys: AWS IAM policies restrict actions/resources
  8. Rotate quarterly + log all usage (detect leak early)

Рабочие примеры

СценарийКонфиг
.env файл# .env (в .gitignore) STRIPE_API_KEY=sk_live_abc123 AWS_ACCESS_KEY_ID=AKIA... OPENAI_API_KEY=sk-proj-xxx # .env.example (в git) STRIPE_API_KEY=sk_live_xxx AWS_ACCESS_KEY_ID=xxx
Node.js reading .envrequire('dotenv').config(); const stripe = require('stripe')(process.env.STRIPE_API_KEY);
pre-commit hook (detect-secrets)pip install detect-secrets detect-secrets scan > .secrets.baseline # .pre-commit-config.yaml: repos: - repo: https://github.com/Yelp/detect-secrets rev: v1.4.0 hooks: [{id: detect-secrets}]
Emergency: remove key из git history# Если key уже в git — rotate ИМЕДИАТНО (key compromised) # Затем clean history: git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch .env" \ --prune-empty --tag-name-filter cat -- --all git push --force origin main
AWS Secrets Managerimport boto3, json client = boto3.client('secretsmanager') secret = json.loads(client.get_secret_value(SecretId='prod/stripe')['SecretString']) api_key = secret['api_key']

Типичные ошибки

  • Committing .env — самая частая ошибка. Always .gitignore first
  • Key в logs: console.log(req) dumps headers с Authorization. Mask секреты в logger
  • Frontend code exposes key: клиент-side JS - ВСЁ видно. Используйте backend proxy
  • Rotation — пропускают в hot codebase. Automate через scripts + alarms на expiring keys
  • Same key в dev + prod — leak one = leak all. Separate keys per env обязателен
ЗаголовкиCSP, HSTS, X-Frame-Options и др.
SSL/TLSШифрование и сертификат
КонфигурацияСерверные настройки и утечки
Оценка A-FОбщий балл безопасности

Почему нам доверяют

OWASP
рекомендации
15+
заголовков безопасности
<2с
результат
A–F
оценка безопасности

Как это работает

1

Введите URL сайта

2

Анализ заголовков безопасности

3

Получите оценку A–F

Что проверяет анализ безопасности?

Инструмент проверяет HTTP-заголовки безопасности, конфигурацию SSL/TLS, утечки серверной информации и защиту от распространённых атак (XSS, clickjacking, MIMEsniffing). Оценка от A до F показывает общий уровень защиты.

Анализ заголовков

Проверка Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy и других.

Проверка SSL

Версия TLS, срок сертификата, цепочка доверия, поддержка HSTS.

Обнаружение утечек

Поиск раскрытых серверных версий, debug-режимов, открытых конфигов и директорий.

Отчёт с рекомендациями

Детальный отчёт с объяснением каждой проблемы и конкретными шагами для исправления.

Кому это нужно

Специалисты по безопасности

аудит HTTP-заголовков

DevOps

проверка конфигурации

Разработчики

CSP и HSTS настройка

Аудиторы

соответствие стандартам

Частые ошибки

Нет Content-Security-PolicyCSP — главная защита от XSS. Без него инъекция скриптов значительно проще.
Нет заголовка HSTSБез HSTS возможна downgrade-атака с HTTPS на HTTP. Включите Strict-Transport-Security.
Server header раскрывает версиюServer: Apache/2.4.52 помогает атакующим подобрать эксплойт. Скройте версию.
X-Frame-Options не установленСайт можно встроить в iframe для clickjacking-атаки. Установите DENY или SAMEORIGIN.
Нет X-Content-Type-OptionsБез nosniff браузер может интерпретировать файлы неправильно (MIME sniffing).

Лучшие практики

Начните с базовых заголовковМинимум: HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy. Займёт 5 минут.
Внедрите CSP постепенноНачните с Content-Security-Policy-Report-Only, мониторьте нарушения, затем включите.
Скройте серверные заголовкиУдалите Server, X-Powered-By, X-AspNet-Version из ответов.
Настройте Permissions-PolicyОграничьте доступ к камере, микрофону, геолокации — только то, что реально используется.
Проверяйте после каждого деплояЗаголовки безопасности могут быть перезаписаны при обновлении конфигурации сервера.

Получите больше с бесплатным аккаунтом

История security-проверок и мониторинг HTTP-заголовков безопасности.

Зарегистрироваться (FREE)

Больше по теме

Часто задаваемые вопросы

GitHub Push Protection — что это?

Bloom filter + regex detection commits на push. Ловит AWS, Stripe, Google, OpenAI keys и другие common patterns. Включается в repo settings.

Как узнать что key leaked?

Scan history: trufflehog. Monitor provider alerts (AWS CloudTrail, Stripe webhook). Enable Secret Scanning в GitHub (free для public repos).

Vault, AWS SM, или .env?

.env для local dev + staging. Vault/SM для production — enable audit, rotation, fine-grained access. Для early-stage — AWS SM cheap и safe.

Client-side keys (e.g. Google Maps)?

Restrict by referer/origin. Google Maps key bound to *.example.com — attacker domain useless. Не 100% защита но raises bar.