GraphQL

Простыми словами

Вместо нескольких фиксированных REST-ответов клиент формирует запрос к единой схеме. Гибкость требует отдельного контроля прав на поля, глубины и стоимости запросов.

Как применяется

При защите GraphQL проверяют авторизацию на уровне объектов и полей, ограничивают сложность, пакетные запросы и introspection, валидируют входные данные и журналируют операции.

Пример применения

Пользователь запрашивает только свой профиль, но добавляет поле с внутренними атрибутами. Сервер обязан проверить право именно на это поле, а не только факт входа.

Не путать с

  • СравнениеREST обычно публикует набор ресурсов и конечных точек; GraphQL предоставляет типизированную схему и гибкий запрос. Ни один подход сам по себе не гарантирует безопасность.

Как это работает

  1. СхемаСервер описывает типы, поля, запросы и изменения данных.
  2. Запрос клиентаКлиент выбирает необходимые поля и передаёт аргументы.
  3. РезолверыОбработчики получают данные, применяя аутентификацию и авторизацию.
  4. ОграниченияСервер контролирует глубину, стоимость, частоту и объём ответа, а события пишет в аудит.

Связанные термины

Частые вопросы

Можно ли скрыть схему и решить проблему безопасности?

Отключение introspection уменьшает раскрытие, но не заменяет проверку прав и ограничение запросов.

Какая типичная уязвимость?

Отсутствие авторизации на уровне объекта или поля, позволяющее получить чужие либо служебные данные.

Как защищаться от тяжёлых запросов?

Ограничивать глубину и стоимость, вводить лимиты, тайм-ауты и сохранённые запросы для доверенных клиентов.

GraphQL — язык запросов и среда выполнения API, позволяющие клиенту явно выбирать поля и структуру получаемых данных по опубликованной схеме.