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 Security Testing: Полное Руководство по OAuth, JWT и API Keys — критически важная дисциплина в современном обеспечении качества программного обеспечения. According to IBM’s Cost of a Data Breach Report 2024, the global average cost of a data breach reached $4.88 million (IBM Cost of a Data Breach 2024). According to OWASP, injection vulnerabilities and broken authentication remain in the top 10 web application security risks (OWASP Top 10). Это руководство охватывает практические подходы, которые QA-команды могут применить немедленно: от базовых концепций и инструментов до реальных паттернов реализации. Независимо от того, развиваешь ли ты навыки в этой области или улучшаешь существующий процесс, здесь ты найдёшь действенные техники, подкреплённые практическим опытом. Цель — не просто теоретическое понимание, а рабочий фреймворк, который можно адаптировать под контекст команды, технологический стек и цели по качеству.

Основы Безопасности 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

«Тестирование безопасности должно быть частью спринта, а не финала релиза. Уязвимость, найденная твоей командой в разработке, стоит в 10 раз дешевле в исправлении, чем обнаруженная пентестером перед запуском.» — Юрий Кан, Senior QA Lead

Тестирование 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 к частым атакам.

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

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

FAQ

В чём разница между SAST и DAST? SAST (статический анализ) сканирует исходный код без запуска, находя проблемы рано. DAST (динамический анализ) тестирует работающие приложения, находя runtime-уязвимости.

Когда следует проводить тестирование безопасности? Начинай с моделирования угроз на этапе проектирования, продолжай SAST в разработке и завершай DAST и пентестингом перед каждым релизом.

Каковы наиболее распространённые уязвимости веб-приложений? OWASP Top 10 охватывает наиболее критичные риски: инъекции, нарушение аутентификации, раскрытие данных, небезопасная конфигурация, XSS и небезопасная десериализация.

Как тестировать SQL инъекции? Используй автоматические сканеры для первичного обнаружения, затем вручную проверяй граничные условия, специальные символы и паттерны слепых инъекций во всех полях ввода.