Не го правете
Питате за грешното решение на проблема.
За да замените апострофите с обратна наклонена черта-апострофи, можете да използвате:
str = msg.replace(/'/g, '\\\'');
но не трябва да правите това . Предоставям само тази информация, защото това е въпросът ви, но прочетете по-долу.
Защо това е лоша идея
Не трябва да го правите от страна на клиента и не трябва да го правите от страна на сървъра. Ако избягването на уязвимости при инжектиране на SQL беше прост въпрос на замяна на апострофите с обратна наклонена черта-апострофи, това нямаше да е проблем. За съжаление е по-сложно.
Имайки информацията, която сте предоставили, дори е невъзможно да се каже дали обратната наклонена черта-апостроф би направил това, което очаквате на първо място, без да видите вашия код, който всъщност прави заявки към базата данни. Но това няма значение, защото никога не трябва да правите това. никога. Вижте тези отговори, за да разберете защо - тези въпроси не са за SQL инжекции, но примерите за код включват уязвимости при инжектиране на SQL и отговорите го обясняват:
- не може да използва backtick при използване на nodejs 7.3.0
- Node js – Предупреждение за отхвърляне на обещание при обработка на много данни
- Възможно ли е да се слуша инстанциране на обект в Node.js?
Задължителен комикс
Какво трябва да направите вместо това
След като казахме това, не казахте какъв модул използвате, за да отправяте заявки към базата данни, но няма значение дали използвате mysql
module или Sequelize или нещо, което си заслужава, винаги трябва да има механизъм за интерполиране на променливи по безопасен начин без ръчно избягване и конкатениране на низовете.
Примери
Не сте показали дори един ред код, който е подходящ тук, така че не мога да ви кажа как да го поправите, но разгледайте този пример:
Опасно:
connection.query(
"SELECT * FROM player WHERE nick = '"
+ data.login + "' AND pass = '" + data.pass + "'",
function (err, rows) {
//...
}
);
Все още опасно, сложно, нечетливо, неподдържащо се и ненадеждно:
connection.query(
"SELECT * FROM player WHERE nick = '"
+ data.login.replace(/'/g, '\\\'') + "' AND pass = '" + data.pass.replace(/'/g, '\\\'') + "'",
function (err, rows) {
//...
}
);
Безопасно и просто:
connection.query(
"SELECT * FROM player WHERE nick = ? AND pass = ?", [data.login, data.pass],
function (err, rows) {
// ...
}
);
Повече информация
За повече информация вижте документите: