Security testing для QA: OWASP Top 10 і базові перевірки безпеки API
"Безпека — це справа пентестерів і DevSecOps." Якщо ви так думаєте — ця стаття може змінити ваш погляд.
У 2026 QA інженер, який вміє базово тестувати безпеку API, коштує значно більше ніж той, хто цього не вміє. І для цього не потрібно ставати security фахівцем.
Чому це важливо для QA
По-перше, security баги дорогі. Злам через SQL injection коштує компанії набагато більше ніж сотні звичайних багів разом.
По-друге, security перевірки знаходяться в зоні відповідальності QA. Якщо QA перевіряє що API повертає правильні дані — він також повинен перевіряти що API не повертає дані яким не належить.
По-третє, стандарти вимагають. GDPR, PCI DSS, SOC2 — все це вимагає демонстрації що компанія тестує на безпеку. QA документація — частина доказової бази.
OWASP Top 10: коротко про найважливіше
OWASP (Open Web Application Security Project) публікує список найкритичніших вразливостей веб-застосунків. Це фактично стандарт галузі.
1. Broken Access Control
Найпоширеніша вразливість. Суть: користувач може отримати доступ до ресурсів, до яких не повинен мати доступу.
Що тестувати:
# Тест: чи може user A бачити дані user B?
GET /api/users/456/profile
Authorization: Bearer <токен user A з ID 123>
# Очікуємо: 403 Forbidden
# Якщо 200 OK — вразливість IDOR (Insecure Direct Object Reference)# Тест: чи може звичайний user виконати admin-дію?
DELETE /api/admin/users/456
Authorization: Bearer <токен звичайного user>
# Очікуємо: 403 Forbidden
# Якщо 200 OK — зламаний контроль доступу2. Cryptographic Failures (колишній Sensitive Data Exposure)
Чутливі дані передаються або зберігаються незахищено.
Що тестувати:
- API відповідає тільки по HTTPS (HTTP повинен редиректити)
- Паролі, токени, PII не логуються
- Відповідь API не містить зайвих чутливих полів (хеші паролів, внутрішні ID, тощо)
# Перевірте що в відповіді немає:
GET /api/users/me
# Відповідь НЕ повинна містити:
{
"id": 123,
"email": "user@example.com",
"password_hash": "...", // ← ВРАЗЛИВІСТЬ
"internal_uuid": "...", // ← підозріло
"credit_card": "..." // ← КРИТИЧНО
}3. Injection (SQL, NoSQL, Command)
Зловмисник вставляє код в запит і змушує систему його виконати.
SQL Injection — базова перевірка:
# В параметрах запиту спробуйте:
GET /api/users?id=1'
GET /api/users?name='; DROP TABLE users; --
GET /api/users?id=1 OR 1=1
# Якщо відповідь 500 з повідомленням про помилку БД — система вразлива
# Безпечна система: 400 Bad Request або 200 з пустим результатомЩо ще перевіряти: чи система не повертає детальні повідомлення про помилки БД (stack traces, SQL queries) в production.
4. Broken Authentication
Проблеми з авторизацією і управлінням сесіями.
Що тестувати:
# 1. Чи можна брутфорсити пароль?
POST /api/auth/login
# Надішліть 100+ запитів з різними паролями — повинен бути rate limiting
# 2. Чи токен валідний після logout?
POST /api/auth/logout # вийти
GET /api/profile # спробувати з тим самим токеном
# Очікуємо: 401 Unauthorized
# 3. JWT: чи можна змінити payload?
# Декодуйте JWT і змініть role з "user" на "admin"
# Система не повинна приймати такий токен5. Security Misconfiguration
Сервери, бази даних або API налаштовані небезпечно.
Що перевірити:
- HTTP headers безпеки присутні
- Swagger/API docs не доступні в production без авторизації
- Verbose error messages вимкнені
# Перевірка security headers
curl -I https://api.example.com/
# Повинні бути присутні:
# Strict-Transport-Security: max-age=31536000
# X-Content-Type-Options: nosniff
# X-Frame-Options: DENY
# Content-Security-Policy: ...6. Vulnerable and Outdated Components
Застарілі бібліотеки з відомими вразливостями. Це зазвичай поза зоною відповідальності QA, але варто знати.
7. Identification and Authentication Failures
Слабкі паролі, відсутність MFA для чутливих операцій.
Що тестувати:
- Чи приймає система слабкі паролі ("123456", "password")?
- Чи є блокування після N невдалих спроб?
- Чи вимагається MFA для адмін-панелі?
8. Software and Data Integrity Failures
Перевірка що дані і оновлення приходять з довірених джерел. Актуально для CI/CD пайплайнів.
9. Security Logging and Monitoring Failures
Відсутність логування security-подій.
Що тестувати:
- Після 10 невдалих спроб логіну — чи є alert в системі моніторингу?
- Спроба доступу до чужого ресурсу — чи логується?
10. Server-Side Request Forgery (SSRF)
Зловмисник змушує сервер робити запити до внутрішніх ресурсів.
# Якщо є поле для URL (аватар по URL, webhook, тощо):
POST /api/profile/avatar
{ "url": "http://169.254.169.254/latest/meta-data/" } # AWS metadata
{ "url": "http://internal-service:8080/admin" } # внутрішні сервіси
# Сервер не повинен виконувати запити до приватних адресПрактичні інструменти
OWASP ZAP (Zed Attack Proxy)
Безкоштовний, open-source. Проксі між браузером і сервером — перехоплює запити і автоматично шукає вразливості.
# Базовий automated scan
docker run -t owasp/zap2docker-stable zap-baseline.py \
-t https://api.example.com \
-r zap-report.htmlBurp Suite Community
Стандарт для мануального security тестування. Community версія безкоштовна. Дозволяє перехоплювати, модифікувати і повторно відправляти запити.
Postman / Bruno
Для мануальних перевірок — просто надсилайте модифіковані запити: змінені ID, SQL-символи, відсутні токени.
Мінімальний чеклист security для QA
Ось що кожен QA повинен перевіряти для кожної фічі з API:
Авторизація:
□ Запит без токена → 401
□ Запит з невалідним токеном → 401
□ Запит з токеном іншого користувача → 403 (якщо чужий ресурс)
Контроль доступу:
□ User не може робити admin-дії
□ User А не може читати/змінювати дані User B
□ Зміна ID в URL не відкриває чужі дані
Валідація вхідних даних:
□ SQL-символи в параметрах не ламають систему (повертає 400, не 500)
□ Довгі рядки обробляються коректно
□ Пусті обов'язкові поля → валідаційна помилка
Чутливі дані:
□ Паролі/токени не повертаються у відповідях
□ Відповідь не містить зайвих внутрішніх полів
□ HTTPS обов'язковий
Підсумок
Security testing — не чорна магія. Базові перевірки доступні кожному QA інженеру без спеціальної підготовки: надіслати запит без токена, спробувати чужий ID, додати SQL-символ в параметр.
Почніть з цього мінімального чекліста для кожної нової фічі — і ви вже робите кращу роботу ніж більшість QA команд.
Для поглиблення: OWASP Testing Guide — безкоштовний, детальний і є стандартом галузі.