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

  1. Broken Object Level Authorization (BOLA/IDOR)
  2. Broken Authentication
  3. Broken Object Property Level Authorization
  4. Unrestricted Resource Consumption
  5. 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 к частым атакам.

Смотрите также

Официальные ресурсы