2015-08-30 10 views
7

GraphQL был недавно выпущен, и, похоже, он рекомендует писать ваши запросы на стороне клиента.Почему безопасно писать запросы GraphQL на стороне клиента?

  1. Что позволяет безопасно писать запросы GraphQL на стороне клиента, но не SQL-запросы?
  2. Является ли GraphQL не подлежащим инъекциям?
  3. Если это так полезно, чтобы ваши запросы на стороне клиента, почему бы не сделать версию SQL не подлежащей инъекциям?

ответ

11

Поскольку на это не нашли ответы пользователи, которые ответили ему вслух, я отправлю их ответы.

  1. Запросы GraphQL проверяются на схему, которая была построена явно для предоставления данных клиенту. SQL не проверяет ваш запрос на что-либо, кроме структуры схемы DB.
  2. Теоретически ваша конечная точка GraphQL имеет некоторую безопасность для проверки того, что пользователю разрешено запрашивать данные в начальной точке своего запроса. Как только они находятся внутри схемы, основанной на графике, разрешения являются неотъемлемой частью определения схемы graphQL, и инъекция ничего не принесет.
  3. Выполнение версии SQL, которая не подлежит инъекции, будет включать некоторые из тех же валидаций, что и в GraphQL. Некоторая проверка того, что все запрошенные данные/мутации разрешены. Как указано в чате, «Injection не является проблемой, присущей SQL».

Ответы зачислены на и Чарли samwgoldman от GraphQL/# общего Слак чата.

+2

Я бы добавил, что переменные Query GraphQL исключают возможность «инъекций». Похожий на "?" в SQLite переменные Query Variance позволяют помещать переменные семантически в запрос, и GraphQL будет проверять перед запуском запроса, чтобы предоставленные значения для переменных были действительными. –

+0

Найдите хорошую статью о GraphQL и безопасности/инъекциях здесь: https://mikewilliamson.wordpress.com/2016/09/15/graphql-and-security/ – joost