Poiché a questa richiesta non è stata data risposta dagli utenti che hanno risposto nel canale allentato, inserirò le loro risposte.
- 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.
- 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.
- 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.
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. –
Trova un bell'articolo su GraphQL e sicurezza/iniezioni qui: https://mikewilliamson.wordpress.com/2016/09/15/graphql-and-security/ – joost