Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was sind Best Practices zum Verhindern von SQL-Injection in node-mysql?

Denken Sie daran, dass SQL-Injections durch feindliche Zeichenfolgen verursacht werden, die als Befehle interpretiert werden, und nicht durch blockierende Befehle. Sind Sie sicher, dass Sie den Original-String zurückbekommen, nicht eine gestringte Version?

Zum Beispiel gibt es einen großen Unterschied zwischen diesen beiden:"test" und "'test'" .

Im Allgemeinen werden nur schädliche Zeichen maskiert, der Rest bleibt unverändert.

Die Verwendung des Low-Level-Treibers wird am besten vermieden. Versuchen Sie, eine Bibliothek wie Sequelize zu verwenden um etwas Abstraktion und mehr Unterstützung zu bieten. Dieses Modul unterstützt Platzhalter-Anweisungen, die das Escape-Zeichen im Allgemeinen zu keinem Problem machen, es wird automatisch gehandhabt.

Siehe den Abschnitt über Rohabfragen mit Ersetzungen wo Sie dies tun können:

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

Es besteht kein Risiko, dass Benutzerdaten durchsickern, da Sie sie als expliziten Wert angegeben haben, der ordnungsgemäß verarbeitet wird, und nicht als Inline-String in der Abfrage.