Безпека API і фільтрація запитів
1) Навіщо це потрібно
API - зовнішня і внутрішня межа платформи. Будь-яка помилка в автентифікації, авторизації, валідації або нормалізації запитів перетворюється в експлуатацію вразливостей (BOLA/IDOR, injection, SSRF, масові перебори, ресурсне виснаження). Мета: створити багаторівневий захист (defense-in-depth) від периметра до бізнес-правил, з вимірюваними SLO і контролем ризиків.
2) Інвентаризація та класифікація API
Каталог API: реєстр всіх сервісів/ендпоінтів, власники, версії, типи клієнтів (web, mobile, партнери), режим (публічний/партнерський/внутрішній), PII/фіндані.
Критичність: High (фінансові операції/авторизація), Medium (читання профілю), Low (публічні довідники).
Поверхня атаки: REST, GraphQL, gRPC, WebSocket, webhooks.
Статус: prod/staging/experimental, політика депрекейту, термін життя токенів/ключів.
Shadow/занедбані API: виявлення через інгрест логів, eBPF/Service Mesh телеметрію, порівняння з каталогом.
3) Модель загроз (коротко)
Ідентифікація: викрадення токенів, фіксація сесії, MitM, replay.
Авторизація: BOLA/IDOR, горизонтальна/вертикальна ескалація.
Введення: ін'єкції (SQL/NoSQL/LDAP), шаблонні/серилізаційні, path traversal, заголовки.
Трафік: DDoS/L7-флуди, повільні запити, фантомні ретраї.
Інтеграції: небезпечні webhooks, SSRF через URL-параметри, завантаження файлів/сканів.
Логіка: зловживання бонусами, гонки, неузгодженість ідемпотентності.
4) Базовий стандарт безпеки (мінімум)
1. TLS 1. 2 + всюди; HSTS; відключені слабкі шифри.
2. Автентифікація: OAuth2/OIDC для клієнтів, mTLS/або HMAC - сервіс-к-сервіс.
3. Авторизація: централізований PDP (RBAC/ABAC), перевірка на об'єктному рівні (BOLA).
4. Валідація: сувора схема (OpenAPI/JSON Schema/Protobuf), відмова при зайвих полях.
5. Ліміти: rate/quotas + burst, пер-клієнт/пер-IP/пер-токен.
6. Ідемпотентність на write-операціях, захист від повторів/гонок.
7. WAF/гейтвей-фільтрація: нормалізація шляхів/заголовків, deny-листи, блок payload-анти-патернів.
8. Секрети: KMS/Vault, ротація ключів/сертифікатів, контроль витоків.
9. Спостережуваність: трасинг, аудит-логи безпеки (хто/що/коли/результат), алерти.
10. Процедури: playbook інцидентів, тест-кейси і регулярні пентести/DAST.
5) Автентифікація та управління токенами
OAuth2/OIDC: короткоживучі access-токени, refresh строго по OIDC; audience/issuer/exp перевіряються на гейтвеї.
JWT: RS256/ES256; мінімальний набір клаймів;'nbf/exp/aud'обов'язкові; заборона на зберігання PII. Ротація ключів через JWKS.
DPoP/PoP: прив'язка токена до ключа клієнта для зниження ризику replay/викрадень.
mTLS для внутрішніх систем і довірених партнерів (атестація по CN/SAN, CRL/OCSP).
HMAC (підписи): детермінована канонікалізація (метод + шлях + timestamp + nonce + body-hash); вікно допустимого часу (± 300s).
Сеанси браузера: SameSite=strict/lax, HttpOnly, Secure; захист від CSRF (double submit/стейт-токени).
Сховище клієнтів: на мобілі - безпечні сховища (Keychain/Keystore), захист від дебагу, пінінг сертифікатів.
6) Авторизація (BOLA-first)
Object-level: кожна операція перевіряє право на конкретний ресурс (resource owner/scope/атрибути).
RBAC/ABAC: ролі + атрибути (країна, сегмент, ліміти ризику, KYC-рівень).
Політики: deny-by-default; явні allow; версіонування політик; тести на негативні кейси.
Кеш рішень: адаптивний TTL + інвалідація при зміні ролей/сегментів.
7) Фільтрація і нормалізація запитів (на гейтвеї/WAF)
Нормалізація: стиснення повторних слешів, заборона'../', декодування один раз, обрізка пробілів/нуль-байтів.
Заголовки: allow-list («Host», «Content-Type», «Accept», «Authorization», «Date», «Idempotency-Key», потрібні trace-заголовки).
Методи: 'GET/HEAD'без тіла;'POST/PUT/PATCH'- з типом'application/json'або строго дозволеними.
Розміри: max-body, max-headers, max-path; early-reject 413/431.
Файли: MIME-валідатор, антивірус/сандбокс, заборона активного контенту, ресайз/санітайз зображень.
URL-переадресації/фетчі: блок SSRF (deny private ranges/metadata IP, схема тільки'https', allow-list доменів).
SQL/NoSQL-патерни: сигнатури ін'єкцій через WAF rule-sets + серверна параметризація запитів.
Приклад політики заголовків (псевдо-формат)
deny_headers: ["X-Forwarded-Proto","X-Original-URL","Proxy-Connection","Destination"]
require_headers: ["Authorization" (для protected), "Content-Type" (для write)]
strip_duplicates: true max_header_count: 32 max_header_size: 16KB
8) Ліміти, квоти та антибот-захист
Rate limiting: token-bucket/ leaky-bucket; рівні - per IP, per API key, per user, per org.
Quotas: добові/місячні, окремі для write/expensive методів.
Адаптивність: динамічна жорсткість при аномаліях (sudden burst/credential stuffing).
Slow-loris/slow-POST: таймаути читання/keep-alive, обмеження паралельних з'єднань.
Антибот: device-fingerprint, поведінкові ознаки, proof-of-work/капча на підвищений ризик, список тор/проксі-мереж.
IP-контроль: гео/ASN-фільтри, deny-листи «брудних» підмереж, allow-листи для партнерів/адмін-панелі.
9) Валідація вхідних даних і схем
Fail-closed: все, що не проходить схему - 400. Зайві поля - відхиляти.
Типи/діапазони: числа, дати (UTC/ISO-8601), enum-значення, довжини рядків, регекспи.
JSON-якість: max-nesting, заборона великих масивів/ключів, canonical order (опціонально).
Бізнес-валідація: ідемпотентність по'Idempotency-Key'; анти-фрод-правила (ліміти частоти операцій, amount caps).
GraphQL: depth/complexity-ліміти, allow-listed queries, пер-поле авторизація.
gRPC: строгі Protobuf-схеми, обов'язкові поля, ліміти розміру повідомлень.
10) Webhooks і зовнішні виклики
Підписи: HMAC з таймстампом/nonce; верифікація до обробки; вікно +/- 5 хв.
Доставка: ретраї з експоненціальною паузою і джиттером; max-спроби; дедуплікація по подієвому ID.
IP allow-list постачальника; окремий піддомен/шлях; мінімальний хостинг-стек.
Відповіді: 2xx тільки після успішного внутрішнього запису; інакше 4xx/5xx зі зрозумілим кодом.
Вихідний SSRF-контроль: при callback URL - allow-list, заборона приватних адрес.
11) Шифрування та управління секретами
У каналі: TLS 1. 2+/1. 3, пінінг, сувора політика шифрів.
У спокої: шифрування БД/об'єктного сховища, окремі ключі для PII/фінданих.
KMS/Vault: централізоване зберігання секретів, короткі TTL, автоматична ротація.
Ключі та сертифікати: окремі для оточень; аудит видач; заборона виведення в логи.
Token-introspection: offline-списки відкликання (revocation), короткі'exp'.
12) Спостережуваність, аудит і реагування
Логи безпеки: спроби/успіхи автентифікації, відмови авторизації, rate-limit події, зміни ролей/лімітів.
Трасування: correlation-ID наскрізний; Трасинг зовнішніх викликів.
Метрики: RPS, P95/P99 latency, error-rate за кодами, частка 401/403/429, hit-rate лімітів, аномалії.
Алерти: сплески 401/403/429, зростання 5xx, часті idempotency-конфлікти, різкі відхилення графQL-complexity.
Playbooks: блокування ключів/токенів, швидкий відкат правил, прогрів deny-листа, повідомлення власників сервісів.
Форензика: збереження спірних payload (з безпечним редагуванням PII), реплеї на ізольованому стенді.
13) Помилки та відповіді клієнту
Єдиний формат помилок (код, повідомлення, trace-id, категорія).
Без витоків: не розкривати SQL, імена таблиць, внутрішні айді; 403 замість «чому саме ні».
Коди: 400 (валідація), 401 (немає автентифікації), 403 (немає прав), 404 (маскувати існування), 405/406, 413/429, 500/503.
Retry-Hints: для 429 - «Retry-After»; для ідемпотентності - порада по повтору з тим же ключем.
14) Архітектурні патерни
Zero-Trust: mTLS, явна авторизація між усіма сервісами, мінімальні привілеї.
API-шлюз + WAF + сервіс-меш: поділ обов'язків - периметр, L7-політики, внутрішня автентифікація.
Canary/Blue-Green: викочувати нові правила фільтрації поетапно зі спостереженням.
Fail-closed: для критичних write - краще безпечно відмовити, ніж допустити некоректну операцію.
Backpressure: черги/буфери, circuit breaker, timeouts/budgets.
15) Приклади практичних правил (псевдо-конфіг)
15. 1 Обмеження шляхів і методів
/api/v1/payments:
allow_methods: [POST, GET]
auth: oauth2_required body:
content_type: application/json max_size: 256KB
15. 2 Ідемпотентність
require_header: Idempotency-Key (UUIDv4)
store: redis:ttl=24h on_duplicate: return_previous_result
15. 3 Підпис запиту (HMAC)
signature:
scheme: "HMAC-SHA256"
required_headers: ["X-Signature","X-Timestamp","X-Nonce"]
allowed_drift: 300s string_to_sign: METHOD + "\n" + PATH + "\n" + SHA256(body) + "\n" + X-Timestamp + "\n" + X-Nonce
15. 4 SSRF-захист
outbound_http:
allowlist_domains: ["kyc. partner. com","psp. example. net"]
block_private_ip: true require_https: true
15. 5 GraphQL ліміт
graphql:
max_depth: 8 max_complexity: 500 allowlisted_operations_only: true
16) Специфіка iGaming/фінансів
Сегментні ліміти: залежать від КУС/країни/ризикового профілю.
Тимчасові вікна: правила частоти депозитів/висновків, «охолодження» між транзакціями.
Анти-аб'юз бонусів: консистентні блокування на акаунт/пристрій/IP/платіжний інструмент.
Аудит вимог регуляторів: зберігання логів дій і рішень (KYC/AML), ретеншн-періоди, незмінні журнали.
17) Контрольний список prod-готовності
- Повний каталог API і карта потоків даних (PII/фінанси позначені).
- OpenAPI/Protobuf-схеми, тести валідації і контракти в CI.
- mTLS/HMAC/OAuth2 налаштовані; короткі TTL токенів; Ротація ключів.
- BOLA-тести і негативні кейси авторизації; централізований PDP.
- Ліміти/квоти/anti-bot, захист від slow-loris; IP-фільтри.
- WAF/гейтвей-правила нормалізації, анти-ін'єкційні сигнатури.
- Ідемпотентність write-операцій; захист від replay.
- Webhook-підписи і allow-list; ізольовані endpoints.
- Секрети в KMS/Vault; зашифровані стораджі; алерти на аномалії.
- Дешборди, алерти, аудит-логи; відпрацьовані playbooks інцидентів.
- Регулярний пентест/DAST/SAST, треки вразливостей і деплою патчів.
18) Антипатерни (чого не можна)
Довіряти'X-Forwarded-'без жорсткої термінції TLS на своєму периметрі.
Приймати довільні'Content-Type'і «м'які» схеми JSON.
Довгоживучі JWT без відкликання/ротації.
Змішувати ролі і бізнес-правила в коді без централізованих політик.
Логи з секретами/PII; детальні 500-повідомлення назовні.
«Тимчасові» відкриті ендпоінти без лімітів та авторизації.
19) Версіонування і депрекейт
Версії в дорозі/заголовку; політика підтримки (наприклад, N-2).
Оголошення: терміни депрекейту, моніторинг використання старих версій, кероване відключення.
Сумісність: контракти та тест-матриці клієнтів/партнерів.
20) Тестування безпеки
Контрактні тести схем/політик, fuzzing входів, negative auth.
Перфоманс-профілі з лімітами/квотами, випробування захистів (chaos-трафік).
Red-team/bug-bounty: сценарії BOLA, SSRF, підписи/реплеї, GraphQL-complexity.
TL; DR
1. Каталог API + строгі схеми.
2. OAuth2/OIDC для клієнтів, mTLS/HMAC всередині.
3. BOLA-периметр на кожен ресурс (ABAC/RBAC).
4. Фільтрація: нормалізація шляхів/заголовків, ліміти, WAF-правила.
5. Ідемпотентність, підписи, захист від replay/SSRF.
6. KMS/Vault і ротація секретів.
7. Спостережуваність, алерти, playbooks.