Выбор ответа Senior gRPC, GraphQL и WebSocket обновлено

Атака глубокими запросами

Вопрос

Что опасного в таком GraphQL-запросе: { user { friends { friends { friends { friends { name } } } } } }?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Экспоненциальная нагрузка на сервер, нужны лимиты глубины и сложности. Каждый уровень умножает число объектов, и запрос в несколько строк может положить сервер и базу: сам GraphQL ничего не объединяет и глубину не ограничивает.

Варианты ответа

  1. Ничего: GraphQL сам объединяет вложенные уровни в один запрос к базе
  2. Он вернёт ошибку синтаксиса: вложенность больше трёх запрещена
  3. Он опасен для клиента, который получит огромный JSON, но не для сервера
  4. Экспоненциальная нагрузка на сервер, нужны лимиты глубины и сложностиправильный ответ

Разбор

Каждый уровень умножает число объектов, и запрос в несколько строк может положить сервер и базу: сам GraphQL ничего не объединяет и глубину не ограничивает. Защита: лимит глубины, оценка стоимости запроса, таймауты, пагинация на списках, а в проде часто отключённая интроспекция или разрешённые списки запросов. Это тест безопасности из OWASP API4 (неограниченное потребление ресурсов).

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.