Выбор ответа Senior gRPC, GraphQL и WebSocket обновлено
Атака глубокими запросами
Вопрос
Что опасного в таком GraphQL-запросе: { user { friends { friends { friends { friends { name } } } } } }?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Экспоненциальная нагрузка на сервер, нужны лимиты глубины и сложности. Каждый уровень умножает число объектов, и запрос в несколько строк может положить сервер и базу: сам GraphQL ничего не объединяет и глубину не ограничивает.
Варианты ответа
- Ничего: GraphQL сам объединяет вложенные уровни в один запрос к базе
- Он вернёт ошибку синтаксиса: вложенность больше трёх запрещена
- Он опасен для клиента, который получит огромный JSON, но не для сервера
- Экспоненциальная нагрузка на сервер, нужны лимиты глубины и сложностиправильный ответ
Разбор
Каждый уровень умножает число объектов, и запрос в несколько строк может положить сервер и базу: сам GraphQL ничего не объединяет и глубину не ограничивает. Защита: лимит глубины, оценка стоимости запроса, таймауты, пагинация на списках, а в проде часто отключённая интроспекция или разрешённые списки запросов. Это тест безопасности из OWASP API4 (неограниченное потребление ресурсов).
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «gRPC, GraphQL и WebSocket»
- Запрос GraphQL
- Интроспекция GraphQL
- Дедлайны в gRPC
- Ошибки в GraphQL
- Query и mutation
- Коды ошибок gRPC
- Виды вызовов gRPC
- Чем вручную вызвать gRPC