Методы проверки защиты REST API от mass assignment атак
Краткий ответ
Проверяют, что API игнорирует непредусмотренные поля и не позволяет изменять критичные атрибуты через тело запроса. Используют тесты с передачей привилегированных данных и валидацией whitelist.
Развёрнуто
Краткий ответ
Для тестирования защиты от mass assignment необходимо отправлять запросы с дополнительными или привилегированными полями в теле и проверять, что сервер их не принимает и не применяет. Важным моментом является проверка наличия whitelist, который ограничивает поля для обновления.
Как это работает
Mass assignment — это уязвимость, при которой REST API автоматически присваивает значения из тела запроса всем полям модели без фильтрации. Это может привести к нежелательному изменению критичных данных, например, ролей пользователя или прав доступа.
Для защиты используют:
- Whitelist — явный список полей, которые разрешено менять через API.
- Игнорирование или отклонение полей, не входящих в whitelist.
Тестировщик отправляет запросы с дополнительными полями, которые не должны изменяться, и проверяет, что они не повлияли на данные.
| Действие | Ожидаемый результат |
|---|---|
| Передача разрешённых полей | Поля успешно обновляются |
| Передача запрещённых полей | Изменения не применяются, поле игнорируется |
Пример
POST /api/users/123 HTTP/1.1
Content-Type: application/json
{
"username": "new_username",
"role": "admin"
}
Если API защищён, поле role не должно измениться, так как оно не входит в whitelist на изменение через этот эндпоинт.
Что важно знать на собеседовании
- Mass assignment возникает при автоматическом маппинге данных из запроса в модель без фильтрации.
- Whitelist ограничивает поля, которые можно менять, предотвращая нежелательные изменения.
- Тестирование заключается в попытках изменить критичные поля и проверке, что они не обновились.
- Необходимо проверять как успешное обновление разрешённых полей, так и игнорирование запрещённых.
- В некоторых фреймворках есть встроенные механизмы защиты, которые тоже стоит проверить.
Тема: Безопасность и авторизация | Уровень: senior