Ponieważ ta odpowiedź nie została udzielona przez użytkowników, którzy odpowiedzieli na nią w luźnym kanale, opublikuję ich odpowiedzi.
- Kwerendy GraphQL są sprawdzane względem schematu, który został zbudowany jawnie w celu udostępnienia danych klientowi. SQL nie sprawdza poprawności kwerendy przed czymkolwiek innym niż struktura schematu DB.
- Teoretycznie twój punkt końcowy GraphQL ma pewne zabezpieczenia, które umożliwiają sprawdzanie, czy użytkownik może wysyłać zapytania do danych w punkcie początkowym zapytania. Gdy już znajdują się w schemacie opartym na wykresie, uprawnienia są nieodłączne od definicji schematu graficznego, a wtrysk niczego nie osiągnie.
- Tworzenie wersji SQL, która nie jest przedmiotem iniekcji, wymagałoby zastosowania tych samych sprawdzeń, które wykonuje GraphQL. Pewne zatwierdzenie, że wszystkie żądane dane/mutacje są dozwolone. Jak cytuje się na czacie, "Injection nie jest problemem nieodłącznym dla SQL".
Odpowiedzi dobro charlie i samwgoldman z GraphQL/# Slack ogólnym czacie.
Dodam, że zmienne zapytań GraphQL eliminują możliwość problemów z "wtryskiem". Podobny do "?" w SQLite, zmienne zapytań GraphQL umożliwiają wstawianie zmiennych semantycznie w obrębie zapytania, a GraphQL sprawdza przed uruchomieniem zapytania, czy podane wartości zmiennych są prawidłowe. –
Znajdź ładny artykuł na temat GraphQL i zabezpieczeń/zastrzyków tutaj: https://mikewilliamson.wordpress.com/2016/09/15/graphql-and-security/ – joost