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

Заключение

Тестирование безопасности API критично для защиты чувствительных данных и предотвращения несанкционированного доступа. Систематическое тестирование механизмов аутентификации, контролей авторизации и валидации ввода гарантирует устойчивость API к частым атакам.