Ответ
В своей работе я сталкиваюсь с различными методами аутентификации и авторизации, каждый из которых требует специфичного подхода к тестированию.
1. Аутентификация (кто ты?):
- Basic Auth: Логин/пароль передаются в заголовке
Authorization: Basic <base64>.- Тестирование: Проверка передачи по HTTPS (не HTTP), попытки подбора слабых паролей, реакция на некорректный base64.
- Token-based (JWT): После логина клиент получает токен (обычно в теле ответа), который затем передает в заголовке
Authorization: Bearer <token>.- Тестирование:
- Проверка структуры JWT (header, payload, signature) на сайте jwt.io.
- Попытка использовать просроченный (
exp) токен. - Попытка модифицировать payload токена и отправить его без переподписи.
- Проверка, что украденный токен с одного устройства не работает с другого, если есть привязка к IP/user-agent (не всегда).
- Тестирование:
- OAuth 2.0 / OpenID Connect: Используется для делегированного доступа ("Войти через Google").
- Тестирование: Проверка корректного flow (authorization code, implicit), проверка
state-параметра на защиту от CSRF, проверка, что приложение не передаетclient_secretво фронтенд.
- Тестирование: Проверка корректного flow (authorization code, implicit), проверка
2. Авторизация (на что ты имеешь право?):
- RBAC (Role-Based Access Control): Права определяются ролью пользователя (Admin, User, Guest).
- Тестирование:
# Пример теста с помощью curl # 1. Получить токен для пользователя 'user' curl -X POST /login -d '{"login":"user","pass":"..."}' # 2. Попытаться удалить ресурс как пользователь (должна быть 403 Forbidden) curl -H "Authorization: Bearer USER_TOKEN" -X DELETE /api/admin/users/123Проверяю, что каждая роль имеет доступ только к своим endpoint'ам и данным.
- Тестирование:
- ABAC (Attribute-Based Access Control): Доступ определяется атрибутами (например,
department = "finance" AND project = "alpha").- Тестирование: Создание пользователей с разными комбинациями атрибутов и проверка доступа к ресурсам. Например, может ли пользователь из отдела
salesувидеть документ с атрибутомconfidential=true.
- Тестирование: Создание пользователей с разными комбинациями атрибутов и проверка доступа к ресурсам. Например, может ли пользователь из отдела
Общие тесты безопасности:
- Инъекция токенов: Попытка использовать токен от другого пользователя для доступа к его данным (IDOR-уязвимость).
- Отсутствие bruteforce-защиты: Проверка, не блокируется ли аккаунт после N неудачных попыток входа.
- Хранение токенов: Проверка, что токены не сохраняются в логах или localStorage без защиты (желательно использовать httpOnly cookies для refresh-токенов).
Инструменты: Для таких проверок я использую Postman (для создания коллекций с разными токенами), Burp Suite/OWASP ZAP для перехвата и модификации запросов, а также пишу небольшие скрипты на Python для автоматизации проверок RBAC/ABAC.