Внедрение SQL динамического запроса GraphQL

#facebook-graph-api #graphql #sql-injection #graphql-js #graphql-java

#facebook-graph-api #graphql #sql-инъекция #graphql-js #graphql-java

Вопрос:

Вопрос о GraphQL и его уязвимости к SQL-инъекциям. Допустим, у меня выполняется некоторый динамический поиск, когда пользователь вводит текст в поле, и я использую это в качестве параметра для поиска GraphQL.

Итак, я получаю что-то вроде этого:

 {
   data {
     location: user_input
  }
}
  

где user_input — это переменная, указанная пользователем.

Теперь, скажем, пользователь должен был попытаться ввести здесь какой-то вредоносный код, чтобы стереть базу данных или что-то в этом роде (т. Е. атака 1 = 1). Будет ли это работать здесь? Просто ли GraphQL переводит запросы в SQL и, следовательно, это может быть опасно? Или GraphQL предотвратит такие вещи?

Спасибо

Ответ №1:

GraphQL — это язык запросов. Из спецификации:

GraphQL — это язык запросов, предназначенный для создания клиентских приложений, предоставляя интуитивно понятный и гибкий синтаксис и систему для описания их требований к данным и взаимодействий… GraphQL — это не язык программирования, способный выполнять произвольные вычисления, а вместо этого язык, используемый для запросов к серверам приложений, возможности которых определены в этой спецификации. GraphQL не требует определенного языка программирования или системы хранения для серверов приложений, которые его реализуют.

GraphQL не зависит от базового уровня данных. Его можно использовать с базой данных SQL, но его также можно использовать с базой данных NoSQL, хранилищем значений ключей в памяти, файловой системой и т. Д.

Является ли конкретная служба GraphQL уязвимой для внедрения SQL, в конечном счете, зависит от того, как эта служба была реализована. Тот факт, что это служба GraphQL, на самом деле не влияет на это.