Non farlo
Stai chiedendo la soluzione sbagliata al problema.
Per sostituire gli apostrofi con apostrofi backslash potresti usare:
str = msg.replace(/'/g, '\\\'');
ma non dovresti farlo . Sto fornendo queste informazioni solo perché è quello che chiede la tua domanda, ma leggi di seguito.
Perché è una cattiva idea
Non dovresti farlo sul lato client e non dovresti nemmeno farlo sul lato server. Se evitare le vulnerabilità dell'iniezione SQL fosse una semplice questione di sostituzione degli apostrofi con apostrofi backslash, non sarebbe un problema. Purtroppo è più complicato.
Avendo le informazioni che hai fornito è persino impossibile dire se backslash-apostrophe farebbe anche quello che ti aspetti in primo luogo senza vedere il tuo codice che effettivamente esegue le query del database. Ma non importa perché non dovresti mai farlo. Mai. Guarda queste risposte per capire perché:quelle domande non riguardano le iniezioni SQL, ma gli esempi di codice includevano vulnerabilità di SQL injection e le risposte lo spiegano:
- non è possibile utilizzare il backtick quando si utilizza nodejs 7.3.0
- Node js - Avviso di rifiuto della promessa quando si elaborano molti dati
- È possibile ascoltare l'istanza dell'oggetto in Node.js?
Fumetto obbligatorio
Cosa dovresti fare invece
Detto questo, non hai detto quale modulo stai usando per interrogare il database, ma non importa se stai usando mysql
modulo o Sequelize o qualsiasi altra cosa degna di nota, dovrebbe esserci sempre un meccanismo per interpolare le variabili in modo sicuro senza eseguire manualmente l'escape e concatenare le stringhe.
Esempi
Non hai mostrato nemmeno una singola riga di codice rilevante qui, quindi non posso dirti come risolverlo, ma considera questo esempio:
Non sicuro:
connection.query(
"SELECT * FROM player WHERE nick = '"
+ data.login + "' AND pass = '" + data.pass + "'",
function (err, rows) {
//...
}
);
Ancora pericoloso, complesso, illeggibile, non manutenibile e inaffidabile:
connection.query(
"SELECT * FROM player WHERE nick = '"
+ data.login.replace(/'/g, '\\\'') + "' AND pass = '" + data.pass.replace(/'/g, '\\\'') + "'",
function (err, rows) {
//...
}
);
Sicuro e semplice:
connection.query(
"SELECT * FROM player WHERE nick = ? AND pass = ?", [data.login, data.pass],
function (err, rows) {
// ...
}
);
Maggiori informazioni
Per maggiori informazioni vedere i documenti: