Основы Безопасности 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
Заключение
Тестирование безопасности API критично для защиты чувствительных данных и предотвращения несанкционированного доступа. Систематическое тестирование механизмов аутентификации, контролей авторизации и валидации ввода гарантирует устойчивость API к частым атакам.