Mysql
 sql >> Database >  >> RDS >> Mysql

Quali sono le best practice per prevenire l'SQL injection in node-mysql?

Ricorda che le iniezioni SQL sono causate da stringhe ostili interpretate come comandi, non da comandi di blocco. Sei sicuro di recuperare la stringa originale, non una versione stringata?

Ad esempio, c'è un'enorme differenza tra questi due:"test" e "'test'" .

Generalmente vengono evitati solo i personaggi dannosi, il resto viene lasciato così com'è.

È meglio evitare l'uso del driver di basso livello. Prova a utilizzare una libreria come Sequelize per fornire un po' di astrazione e più supporto. Quel modulo supporta le istruzioni segnaposto che generalmente rendono l'escape un non problema, viene gestito automaticamente.

Vedi la sezione su query grezze con sostituzioni dove hai la possibilità di farlo:

sequelize.query('SELECT * FROM projects WHERE status = ?',
  { replacements: ['active'], type: sequelize.QueryTypes.SELECT }
).then(function(projects) {
  console.log(projects)
})

Non c'è il rischio che i dati dell'utente vengano trapelati perché li hai forniti come un valore esplicito gestito correttamente, non come una stringa inline nella query.