2015-08-30 11 views
7

GraphQL è stato rilasciato di recente e sembra incoraggiare la scrittura delle query sul lato client.Perché è sicuro scrivere query GraphQL lato client?

  1. Che cosa rende sicuro scrivere query GraphQL lato client, ma non query SQL?
  2. GraphQL non è soggetto a iniezioni?
  3. Se è così utile avere le query sul lato client, perché non rendere una versione di SQL non soggetta a iniezioni?

risposta

11

Poiché a questa richiesta non è stata data risposta dagli utenti che hanno risposto nel canale allentato, inserirò le loro risposte.

  1. Le query GraphQL sono convalidate rispetto a uno schema che è stato creato esplicitamente per esporre i dati al client. SQL non convalida la query su qualcosa di diverso dalla struttura dello schema DB.
  2. In teoria il tuo endpoint GraphQL ha una sorta di sicurezza per validare l'utente è autorizzato a interrogare i dati al punto di partenza della loro query. Una volta all'interno dello schema basato su Graph, le autorizzazioni sono inerenti alla definizione dello schema graphQL e l'injection non otterrebbe alcun risultato.
  3. Fare una versione di SQL che non è soggetta all'iniezione implicherebbe alcune delle stesse convalide eseguite da GraphQL. Una sorta di convalida che tutti i dati richiesti/mutazioni sono consentiti. Come citato nella chat, "L'iniezione non è un problema inerente a SQL".

risposte accreditate Charlie e samwgoldman dal GraphQL/# General Chat Slack.

+2

Vorrei aggiungere che le variabili di query GraphQL eliminano la possibilità di problemi di "iniezione". Simile a "?" in SQLite, le variabili di query GraphQL consentono di inserire semanticamente le variabili all'interno della query e GraphQL eseguirà la convalida prima di eseguire la query che i valori forniti per le variabili siano validi. –

+0

Trova un bell'articolo su GraphQL e sicurezza/iniezioni qui: https://mikewilliamson.wordpress.com/2016/09/15/graphql-and-security/ – joost