Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quelles sont les meilleures pratiques pour empêcher l'injection SQL dans node-mysql ?

N'oubliez pas que les injections SQL sont causées par des chaînes hostiles interprétées comme des commandes, et non par des commandes bloquantes. Êtes-vous sûr de récupérer la chaîne d'origine, et non une version stringifiée ?

Par exemple, il y a une énorme différence entre ces deux :"test" et "'test'" .

Généralement, seuls les caractères nuisibles sont échappés, les autres sont laissés tels quels.

Il vaut mieux éviter d'utiliser le pilote de bas niveau. Essayez d'utiliser une bibliothèque comme Sequelize pour fournir un peu d'abstraction et plus de soutien. Ce module prend en charge les déclarations d'espace réservé qui font généralement de l'échappement un non-problème, il est géré automatiquement.

Voir la section sur les requêtes brutes avec remplacements où vous avez la possibilité de le faire :

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

Il n'y a aucun risque de fuite de données utilisateur, car vous les avez fournies en tant que valeur explicite gérée correctement, et non en tant que chaîne en ligne dans la requête.