Краткий ответ: Отдавайте всё через HTTPS, аутентифицируйте короткоживущими токенами или ключами, ограничивайте частоту на каждом эндпоинте на веб-сервере (limit_req в Nginx), валидируйте весь ввод, прячьте админ-маршруты от публичного интернета и логируйте достаточно, чтобы замечать злоупотребления. Большинство взломов приложений эксплуатируют отсутствующие основы, а не экзотические дыры.
Обзор
API и веб-приложения атакуют иначе, чем серверы: credential stuffing, утечка токенов, инъекции, скрейпинг и флуды Layer 7 приходят как «валидный» HTTP. Поэтому защита живёт в веб-сервере и на уровне приложения — сам файрвол не отличит попытку входа от атаки.
Что нужно иметь
- Перечень публичных эндпоинтов и понимание, какие из них меняют данные или стоят реальных ресурсов.
- Уже настроенный TLS (инструкция по SSL-сертификатам).
Пошаговая инструкция
- Лимит частоты в Nginx:
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s; server { location /api/ { limit_req zone=api burst=20 nodelay; } location /login { limit_req zone=api burst=5; } } - Гигиена аутентификации: короткоживущие токены, ротация API-ключей, никаких учётных данных по HTTP, хеши паролей через bcrypt/argon2.
- Валидация ввода: параметризованный SQL везде, строгие схемы для JSON-тел, лимиты размера (
client_max_body_size). - Снижение экспозиции: привязывайте админ-панели и базы к localhost или VPN; файрвол должен показывать только 80/443 и SSH.
- Рассмотрите WAF: ModSecurity с OWASP Core Rule Set для самостоятельной фильтрации типовых инъекционных паттернов.
- Логируйте и алертите: всплески 4xx/5xx, неудачные аутентификации и новые user-agent; злоупотребление, замеченное за час, стоит меньше, чем замеченное за месяц.
Типичные проблемы
- Слишком жёсткие лимиты: легитимные клиенты получают 503 — выводите пороги из наблюдаемого трафика с запасом и используйте
burst. - Доверие клиентским проверкам: валидация должна происходить на сервере; клиент контролируется атакующим.
- Секреты в репозитории: токены, закоммиченные в историю git, остаются утёкшими навсегда — ротируйте и используйте переменные окружения.
Когда обращаться в поддержку
Безопасность приложения — территория клиента, но если злоупотребление перерастает в трафик, влияющий на всю услугу, сообщите об этом как об атаке. При подозрении на утечку данных на вашей стороне — сначала изолируйте (инструкция по инцидентам).
Частые вопросы
Что добавить к публичному API первым?
Ограничение частоты на уровне веб-сервера — Nginx limit_req с per-IP зоной останавливает credential stuffing, скрейпинг и случайные циклы клиентов ещё до вашего кода приложения.
Нужен ли WAF маленькому приложению?
Это полезный дополнительный слой: ModSecurity с OWASP Core Rule Set бесплатно фильтрует типовые паттерны инъекций и сканеров, хотя никогда не заменяет валидацию ввода в коде.
Как обращаться с API-ключами и токенами?
Выдавайте короткоживущие токены, где возможно, ротируйте долгоживущие ключи по расписанию, передавайте их только по HTTPS и держите в переменных окружения — никогда в git-репозитории.
Похожие статьи
- Как защититься от brute-force атак
- Как настроить SSL-сертификаты
- Как выявить подозрительный трафик
- Что такое DDoS-атака?
Нужна помощь? Связаться с поддержкой Cloud2Y →
