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.