Tu es nicht
Sie fragen nach der falschen Lösung des Problems.
Um die Apostrophe durch Backslash-Apostrophe zu ersetzen, könnten Sie Folgendes verwenden:
str = msg.replace(/'/g, '\\\'');
aber das sollten Sie nicht tun . Ich stelle diese Informationen nur bereit, weil Ihre Frage darum geht, aber lesen Sie weiter unten.
Warum es eine schlechte Idee ist
Sie sollten es nicht auf der Clientseite tun und Sie sollten es auch nicht auf der Serverseite tun. Wenn das Vermeiden von SQL-Injection-Schwachstellen einfach darin bestehen würde, Apostrophe durch Backslash-Apostrophe zu ersetzen, wäre dies kein Problem. Leider ist es komplizierter.
Mit den von Ihnen bereitgestellten Informationen ist es sogar unmöglich zu sagen, ob Backslash-Apostroph überhaupt das tun würde, was Sie erwarten, ohne Ihren Code zu sehen, der tatsächlich die Datenbankabfragen durchführt. Aber es spielt keine Rolle, weil Sie das niemals tun sollten. Niemals. Sehen Sie sich diese Antworten an, um zu sehen, warum - diese Fragen beziehen sich nicht auf SQL-Injections, aber die Codebeispiele enthielten SQL-Injection-Schwachstellen und die Antworten erklären es:
- Backtick kann nicht verwendet werden, wenn nodejs 7.3.0 verwendet wird
- Node js - Promise Rejection Warning, wenn viele Daten verarbeitet werden
- Ist es möglich, in Node.js auf die Instanziierung von Objekten zu horchen?
Obligatorischer Comic
Was Sie stattdessen tun sollten
Davon abgesehen haben Sie nicht gesagt, welches Modul Sie verwenden, um die Datenbank abzufragen, aber egal, ob Sie mysql
verwenden Modul oder Sequelize oder irgendetwas Wertvolles, es sollte immer einen Mechanismus geben, um Variablen sicher zu interpolieren, ohne die Strings manuell zu maskieren und zu verketten.
Beispiele
Sie haben nicht einmal eine einzige Codezeile gezeigt, die hier relevant ist, daher kann ich Ihnen nicht sagen, wie Sie das Problem beheben können, aber betrachten Sie dieses Beispiel:
Unsicher:
connection.query(
"SELECT * FROM player WHERE nick = '"
+ data.login + "' AND pass = '" + data.pass + "'",
function (err, rows) {
//...
}
);
Immer noch unsicher, komplex, unlesbar, nicht wartbar und unzuverlässig:
connection.query(
"SELECT * FROM player WHERE nick = '"
+ data.login.replace(/'/g, '\\\'') + "' AND pass = '" + data.pass.replace(/'/g, '\\\'') + "'",
function (err, rows) {
//...
}
);
Sicher und einfach:
connection.query(
"SELECT * FROM player WHERE nick = ? AND pass = ?", [data.login, data.pass],
function (err, rows) {
// ...
}
);
Weitere Informationen
Weitere Informationen finden Sie in den Dokumenten: