🛡️
Безопасность

Безопасность API: rate limiting, API ключи, аутентификация и CORS

10.09.2034
← Все статьи

Почему важна безопасность API

Если frontend выдаёт ошибку, пользователь может нажать обновить. Но API имеет прямой доступ к базе данных, и одна уязвимость может открыть данные тысяч клиентов. Поэтому API-слой должен иметь многоуровневую защиту: аутентификация, авторизация, rate limiting, валидация ввода и другие контроли.

В практике Sayt.uz REST и GraphQL API требуют разных подходов. В REST каждый endpoint защищается отдельно, в GraphQL дополнительно нужен контроль глубины и сложности запроса. В обоих случаях принципы одинаковые — относиться к каждому запросу как к подозрительному.

Rate limiting и защита от abuse

Rate limiting ограничивает число запросов с одного пользователя или IP за определённое время. Это защищает от DDoS, brute force и атак на исчерпание ресурсов. Чаще всего применяются алгоритмы token bucket и sliding window. На Sayt.uz используется sliding window на Redis: один IP не более 100 запросов в минуту и 2000 в час.

Для login endpoint установлен отдельный жёсткий лимит: 5 неверных попыток с одного IP в минуту, затем блок на 15 минут. Это защищает от credential stuffing. Для премиум-пользователей лимит может быть выше, но всегда должен быть абсолютный максимум.

Управление API-ключами

API-ключ — не просто пароль, его нужно защищать отдельно. У каждого ключа должен быть чёткий scope: read-only, read-write, admin и т. д. Ключи никогда не хранятся на стороне клиента, только на сервере через environment variable или secret manager.

В практике Sayt.uz у каждого API-ключа есть срок (обычно 1 год) и обязательная ротация. Старый ключ работает вместе с новым ещё 30 дней, потом отключается автоматически. Каждый ключ логируется отдельно, и при аномалиях владельцу приходит email.

Виды аутентификации

Для API существует несколько методов аутентификации: Basic Auth, API key, OAuth 2.0, JWT, mTLS. Basic Auth самый простой, но каждый запрос содержит логин и пароль — только под HTTPS. API key хорош для простой server-to-server интеграции.

OAuth 2.0 и JWT идеальны для API с пользовательским контекстом. mTLS (mutual TLS) — самый высокий уровень защиты: и сервер, и клиент подтверждают друг друга сертификатом, это применяется в финтех и healthcare. На Sayt.uz для публичного API используется JWT, для партнёрских интеграций — mTLS.

CORS и same-origin policy

CORS — механизм безопасности браузера, который контролирует, с каких доменов разрешён запрос к API. Плохая конфигурация Access-Control-Allow-Origin: * позволяет получать данные с любого сайта и повышает риск CSRF.

Правильный подход — whitelist конкретных доменов. Для API с credentials (cookie) wildcard origin запрещён, нужно указывать конкретный домен. На Sayt.uz для каждой среды (dev, staging, prod) свои правила CORS, а preflight cache настроен на 24 часа.

Практика Sayt.uz

Защита API на Sayt.uz: все endpoint только HTTPS, аутентификация JWT, rate limit по IP и пользователю, уникальный request_id для каждого запроса, audit log на все изменяющие операции. Версионирование через URL (/v1, /v2), о deprecation сообщают за 6 месяцев. WAF (Web Application Firewall) подключён через Cloudflare.

Похожие статьи

🛡️ Защита от ransomware: бэкапы, сегментация, EDR и реагирование на инциденты 🎣 Защита сотрудников от фишинговых атак: обучение и технические меры 📋 Чеклист аудита безопасности: WordPress, сервер, SSL и проверка резервных копий 🔐 Мониторинг SSL-сертификатов: отслеживание срока действия и авто-обновление
🌐 Язык
🇺🇿 O'zbek 🇺🇿 Ўзбек 🇷🇺 Русский 🇬🇧 English