Impedisci SQL injection in Go Postgresql
Oct 02 2020
Ho cercato nel forum di postgresql injection in Go e ho trovato alcune informazioni utili in SQL injection come di seguito:
Come eseguire una ricerca IN in SQL utilizzando Golang?
Come posso prevenire attacchi di SQL injection in Go durante l'utilizzo di "database / sql"?
ma ho ancora bisogno di qualche consiglio perché il mio codice in Go utilizza un diverso tipo di codice e casi d'uso. alcuni casi d'uso / domande per i quali ho bisogno di consigli sono come questo
- Utilizzando il ciclo di query per più inserimenti come l'
INSERT INTO a (a1,a2,a3) VALUES (%d,%d,%s)uso di fmt.Sprintf, so che usare sprinft è pessimo. quindi c'è qualche soluzione per questa query di loop per l'inserimento? Ex:INSERT INTO a (a1,a2,a3) VALUES (%d,%d,%s),(%d,%d,%s),(%d,%d,%s) - È sicuro usare fmt.Sprintf per generare query se il parametro sta usando
%dinvece di%s? - L'uso dell'istruzione Prepare e della query è sicuro, ma cosa succede se sto usando la funzione Select (using $1,$2) e la funzione NamedQuery (usando la struttura denominata.) Es:
Select * from a where text = $1-> sta usando questo$1sicuro? ed Ex:Select * from a where text = :text-> è sicuro nella funzione NamedQuery?
Ho bisogno del tuo consiglio ragazzi. Grazie!
Risposte
5 KennyGrant Oct 02 2020 at 18:20
In primo luogo, di solito preferisci usare i segnaposto db? $ 1 ecc.
- Sì, è sicuro usare fmt.Sprintf con parametri interi per compilare SQL, anche se vale la pena evitarlo se puoi, ma il tuo terzo parametro è% s - evitalo e usa?
- Sì, è sicuro usare fmt.Sprintf con parametri interi, ma% so% v è molto più rischioso e lo eviterei, non riesco a pensare perché ne avresti bisogno.
- Usa i segnaposto qui, quindi sì, è sicuro.
Regole generali:
- Usa segnaposto per impostazione predefinita, dovrebbe essere raro usare% d (come nella tua query IN per esempio)
- Analizza i parametri in tipi come integer prima di qualsiasi convalida o utilizzo
- Evita la concatenazione di stringhe se puoi e fai particolare attenzione ai parametri delle stringhe
- Codifica sempre cose come i nomi delle colonne e delle tabelle, non generarle mai dall'input dell'utente (ad esempio? Sort = mystringcolname)
- Verifica sempre che i parametri che ottieni siano solo quelli autorizzati per quell'utente