Как я могу разрешить только запросы из белого списка с графеном? - PullRequest
0 голосов
/ 30 января 2020

Если посмотреть на Graphene, чтобы предоставить публикуемый c API, если бы вы наивно следовали документированным примерам, было бы относительно легко предоставить API, который был бы уязвим для атак типа "отказ в обслуживании", даже если они не не намеренно:

  • Не разбитые на запросы запросы могут вернуть слишком много данных.
  • Слишком глубокие запросы, возможно, даже циклические запросы, могут привести к слишком большому количеству объединений в вашей базе данных.

По этой причине я склонен сказать, что самый простой подход к защите публичного c API GraphQL - это создание белого списка запросов в работе. Если запрос отсутствует в белом списке, а пользователь не является администратором, отклоните запрос.

Таким образом, возникает вопрос: как сохранить белый список запросов в графене и отклонить запросы, которых нет в этом белом списке? Некоторые идеи:

  • Промежуточное программное обеспечение WSGI поверх графена: это проблематично c, потому что это потребует анализа запроса gql, чтобы определить, действительно ли он находится в белом списке. Это работа Графена, так что это не стартер.
  • Промежуточное программное обеспечение Графена. Это все еще слишком гранулировано; Промежуточное программное обеспечение Графена, кажется, запускается не один раз на запрос, а скорее на один узел в запросе . Так что это тоже не очень хорошее решение.

Итак, не пытаясь углубиться в исправление обезьян в графене, у меня остается тот же вопрос: как мне реализовать белый список запросов с графеном? (Или, как альтернатива, как мне защитить рабочий сервер Graphene от чрезмерно дорогих запросов?)

1 Ответ

0 голосов
/ 03 февраля 2020

Промежуточное программное обеспечение графена - это то, что я бы (и я) использовал для такого требования. Это гранулированный, но по причине - весь GraphQL был разработан с учетом гранулярности. Кроме того, я не уверен, что вы имеете в виду, когда запускаете один раз для запроса . Поля запросов - это то, что имеет значение, и если вы хотите включить в список поля верхнего уровня, промежуточное программное обеспечение идеально подходит для этого. Эта практика также косвенно предлагается в Обслуживание по HTTP - вы оставляете аутентификацию на уровне HTTP (например, с использованием JWT) и авторизацию на промежуточном программном обеспечении GraphQL. Это также один из примеров использования из документации по графену .

...