Вместо нескольких фиксированных REST-ответов клиент формирует запрос к единой схеме. Гибкость требует отдельного контроля прав на поля, глубины и стоимости запросов.
При защите GraphQL проверяют авторизацию на уровне объектов и полей, ограничивают сложность, пакетные запросы и introspection, валидируют входные данные и журналируют операции.
Пользователь запрашивает только свой профиль, но добавляет поле с внутренними атрибутами. Сервер обязан проверить право именно на это поле, а не только факт входа.
Отключение introspection уменьшает раскрытие, но не заменяет проверку прав и ограничение запросов.
Какая типичная уязвимость?Отсутствие авторизации на уровне объекта или поля, позволяющее получить чужие либо служебные данные.
Как защищаться от тяжёлых запросов?Ограничивать глубину и стоимость, вводить лимиты, тайм-ауты и сохранённые запросы для доверенных клиентов.