No lo hagas
Estás preguntando sobre la solución incorrecta al problema.
Para reemplazar los apóstrofes con apóstrofes de barra invertida, puede usar:
str = msg.replace(/'/g, '\\\'');
pero no deberías hacer eso . Solo proporciono esa información porque eso es lo que pregunta su pregunta, pero lea a continuación.
Por qué es una mala idea
No debe hacerlo en el lado del cliente y tampoco debe hacerlo en el lado del servidor. Si evitar las vulnerabilidades de inyección SQL fuera una simple cuestión de reemplazar apóstrofes con apóstrofes de barra invertida, entonces no sería un problema. Lamentablemente es más complicado.
Teniendo la información que proporcionó, es incluso imposible saber si la barra invertida-apostrofe haría lo que esperaba en primer lugar sin ver su código que realmente realiza las consultas de la base de datos. Pero no importa porque nunca deberías hacer eso. Nunca. Vea esas respuestas para ver por qué:esas preguntas no son sobre inyecciones de SQL, pero los ejemplos de código incluyen vulnerabilidades de inyección de SQL y las respuestas lo explican:
- no se puede usar el acento grave cuando se usa nodejs 7.3.0
- Node js:advertencia de rechazo de promesa cuando se procesan muchos datos
- ¿Es posible escuchar la creación de instancias de objetos en Node.js?
Tebeo obligatorio
Qué deberías hacer en su lugar
Habiendo dicho eso, no dijiste qué módulo estás usando para consultar la base de datos, pero no importa si estás usando mysql
módulo o Sequelize o cualquier cosa que valga la pena, siempre debe haber un mecanismo de interpolación de variables de una manera segura sin escapar manualmente y concatenar las cadenas.
Ejemplos
No mostraste ni una sola línea de código que sea relevante aquí, así que no puedo decirte cómo solucionarlo, pero considera este ejemplo:
Inseguro:
connection.query(
"SELECT * FROM player WHERE nick = '"
+ data.login + "' AND pass = '" + data.pass + "'",
function (err, rows) {
//...
}
);
Todavía inseguro, complejo, ilegible, imposible de mantener y poco confiable:
connection.query(
"SELECT * FROM player WHERE nick = '"
+ data.login.replace(/'/g, '\\\'') + "' AND pass = '" + data.pass.replace(/'/g, '\\\'') + "'",
function (err, rows) {
//...
}
);
Seguro y sencillo:
connection.query(
"SELECT * FROM player WHERE nick = ? AND pass = ?", [data.login, data.pass],
function (err, rows) {
// ...
}
);
Más información
Para obtener más información, consulte los documentos: