TL;DR
- Тестируйте BOLA/IDOR на каждом эндпоинте—это уязвимость #1 для API (OWASP API Security Top 10 2023)
- Тестирование JWT должно покрывать подмену алгоритма, слабые секреты и манипуляцию токеном—не только срок действия
- Никогда не принимайте API ключи в URL; проверяйте, что rate limiting работает по ключу, а не только по IP
Подходит для: Публичные API, multi-tenant системы, API, обрабатывающие чувствительные данные (PII, финансовые, медицинские)
Пропустить если: Только внутренние API с доверенными клиентами, ранняя фаза прототипирования
Время чтения: 18 минут
Безопасность API является фундаментальной в современной разработке. Эта статья дополняет наше полное руководство по API тестированию и углубляется в аспекты безопасности. Если вы работаете с мобильными приложениями, вам также будет интересно наше руководство по OAuth и JWT в мобильном тестировании и лучшие практики мобильной безопасности.
Основы Безопасности API
Тестирование безопасности API валидирует аутентификацию, авторизацию, валидацию ввода и механизмы защиты данных.
OWASP API Security Top 10
- Broken Object Level Authorization (BOLA/IDOR)
- Broken Authentication
- Broken Object Property Level Authorization
- Unrestricted Resource Consumption
- Broken Function Level Authorization
Тестирование OAuth 2.0
class OAuthFlowTester:
def test_authorization_flow(self):
# Шаг 1: Получить код авторизации
params = {
'response_type': 'code',
'client_id': self.client_id,
'redirect_uri': 'http://localhost:3000/callback'
}
# Шаг 2: Обменять код на токен
token_response = requests.post(self.token_url, data={
'grant_type': 'authorization_code',
'code': auth_code
})
assert 'access_token' in token_response.json()
Тестирование JWT
// JWT testing
const jwt = require('jsonwebtoken');
// Test просроченного JWT
function testExpiredJWT() {
const token = jwt.sign({ userId: 123 }, secret, { expiresIn: '-1s' });
try {
jwt.verify(token, secret);
console.error('✗ Просроченный JWT был принят!');
} catch (err) {
console.log('✓ Просроченный JWT правильно отклонен');
}
}
Тестирование API Keys
class APIKeyTester:
def test_api_key_in_header(self, api_key):
response = requests.get(
f"{self.base_url}/api/data",
headers={'X-API-Key': api_key}
)
assert response.status_code == 200
def test_rate_limiting(self, api_key):
for i in range(110):
response = requests.get(url, headers={'X-API-Key': api_key})
# Должен достичь rate limit
assert 429 in responses
Тестирование Авторизации (BOLA/IDOR)
def test_bola():
# Токен Пользователя A
token_a = 'user_a_token'
# Попытка доступа к ресурсу Пользователя B
response = requests.get(
f'https://api.example.com/users/456/profile',
headers={'Authorization': f'Bearer {token_a}'}
)
# Должен вернуть 403 Forbidden
assert response.status_code == 403
Подходы с Использованием ИИ
Тестирование безопасности можно улучшить с помощью инструментов ИИ для обнаружения уязвимостей и генерации тестов.
Что ИИ делает хорошо:
- Генерировать payload’ы для тестирования безопасности из рекомендаций OWASP
- Анализировать спецификации API для выявления потенциальных пробелов в авторизации
- Создавать комплексные тест-кейсы для инъекций (SQL, NoSQL, XSS)
- Определять отсутствующие заголовки безопасности в ответах API
- Генерировать сценарии манипуляции JWT
Что всё ещё требует людей:
- Понимание бизнес-контекста для определения потоков чувствительных данных
- Валидация соответствия контролей безопасности требованиям compliance (GDPR, HIPAA, PCI-DSS)
- Оценка серьёзности рисков на основе бизнес-воздействия
- Проектирование сценариев атак, комбинирующих несколько уязвимостей
- Проверка, что исправления безопасности не ломают легитимную функциональность
Полезные промпты:
Проанализируй эту спецификацию API и определи потенциальные уязвимости BOLA/IDOR.
Для каждого эндпоинта, обращающегося к ресурсам конкретного пользователя,
сгенерируй тест-кейсы, проверяющие правильные проверки авторизации.
Сгенерируй комплексный набор тестов безопасности JWT, включая: атаки подмены
алгоритма, обработку просроченных токенов, манипуляцию подписью и обнаружение
слабых секретов. Включи реализации на Python и JavaScript.
Когда Инвестировать в Тестирование Безопасности API
Тестирование безопасности необходимо когда:
- API обрабатывают чувствительные данные (PII, финансовые, медицинские записи)
- Публичные API, доступные сторонним разработчикам
- Multi-tenant системы, где изоляция данных критична
- API, обрабатывающие платежи или аутентификацию
- Требования compliance (SOC2, HIPAA, PCI-DSS, GDPR)
- После инцидентов безопасности или раскрытия уязвимостей
Рассмотрите более лёгкие подходы когда:
- Только внутренние API с контролем доступа на уровне сети
- Раннее прототипирование, где безопасность ещё не настроена
- API только для чтения, возвращающие публичные данные
- Среды разработки без продакшен-данных
| Сценарий | Рекомендуемый Подход |
|---|---|
| Публичный API с чувствительными данными | Полный набор: OWASP Top 10, pen testing, автоматизированное сканирование |
| Внутренние микросервисы | Тестирование BOLA/IDOR, валидация аутентификации, базовые тесты инъекций |
| Интеграция со сторонним API | Фокус на безопасности credentials, обработке rate limit |
| Backend мобильного приложения | Безопасность JWT, хранение токенов, управление сессиями |
| B2B API продукт | Безопасность API ключей, изоляция клиентов, audit logging |
Измерение Успеха
| Метрика | До Тестирования | Цель | Как Отслеживать |
|---|---|---|---|
| Покрытие OWASP Top 10 | Неизвестно | 100% протестировано | Чеклист тестов безопасности |
| Уязвимости BOLA/IDOR | Обнаружены в проде | 0 в проде | Отчёты pen test |
| Попытки Обхода Аутентификации | Не мониторится | 100% заблокировано | Логи WAF/API gateway |
| Обнаружение Атак Инъекций | Переменное | < 1мс обнаружение | Мониторинг безопасности |
| Время Устранения Критических | Дни/Недели | < 24 часов | Трекинг инцидентов |
Предупреждающие знаки, что тестирование безопасности не работает:
- Уязвимости обнаруживаются внешними исследователями
- Обход аутентификации найден в продакшене
- Утечки данных или инциденты несанкционированного доступа
- Провалы аудитов compliance
- Успешные атаки инъекций против API
- API ключи или токены раскрыты в логах или URL
Заключение
Тестирование безопасности API критично для защиты чувствительных данных и предотвращения несанкционированного доступа. Систематическое тестирование механизмов аутентификации, контролей авторизации и валидации ввода гарантирует устойчивость API к частым атакам.
Смотрите также
- API Testing Mastery: Полное Руководство - Основы и продвинутые техники тестирования API
- OAuth и JWT в Мобильном Тестировании - Безопасная аутентификация в мобильных приложениях
- Mobile Security Testing - Тестирование безопасности мобильных приложений
- API Rate Limiting Testing - Валидация лимитов и throttling в API
- API Testing в Микросервисных Архитектурах - Тестирование API в распределённых системах
