Nedělejte to
Ptáte se na špatné řešení problému.
Chcete-li nahradit apostrofy zpětným lomítkem-apostrofy, můžete použít:
str = msg.replace(/'/g, '\\\'');
ale neměli byste to dělat . Tyto informace poskytujem pouze proto, že se jich týká vaše otázka, ale přečtěte si je níže.
Proč je to špatný nápad
Neměli byste to dělat na straně klienta a neměli byste to dělat ani na straně serveru. Pokud by vyhýbání se zranitelnostem vkládání SQL bylo jednoduchou záležitostí nahrazení apostrofů zpětným lomítkem-apostrofy, pak by to nebyl problém. Bohužel je to složitější.
S informacemi, které jste poskytli, je dokonce nemožné říct, zda by zpětné lomítko-apostrof vůbec udělal to, co očekáváte, aniž byste viděli váš kód, který ve skutečnosti dělá databázové dotazy. Ale na tom nezáleží, protože byste to nikdy neměli dělat. Nikdy. Podívejte se na tyto odpovědi a zjistěte proč – tyto otázky se netýkají injekcí SQL, ale příklady kódu zahrnovaly zranitelnosti vkládání SQL a odpovědi to vysvětlují:
- nelze použít backtick při použití nodejs 7.3.0
- Node js – upozornění na odmítnutí slibu při zpracování velkého množství dat
- Je možné naslouchat instanci objektu v Node.js?
Povinný komiks
Co byste měli udělat místo toho
Jak již bylo řečeno, neřekli jste, jaký modul používáte k dotazování databáze, ale bez ohledu na to, zda používáte mysql
modul nebo Sequelize nebo cokoli, co stojí za jeho sůl, by měl vždy existovat mechanismus pro bezpečnou interpolaci proměnných bez ručního escapování a zřetězení řetězců.
Příklady
Neukázali jste ani jeden řádek kódu, který je zde relevantní, takže vám nemohu říci, jak to opravit, ale zvažte tento příklad:
Nebezpečné:
connection.query(
"SELECT * FROM player WHERE nick = '"
+ data.login + "' AND pass = '" + data.pass + "'",
function (err, rows) {
//...
}
);
Stále nebezpečné, složité, nečitelné, neudržovatelné a nespolehlivé:
connection.query(
"SELECT * FROM player WHERE nick = '"
+ data.login.replace(/'/g, '\\\'') + "' AND pass = '" + data.pass.replace(/'/g, '\\\'') + "'",
function (err, rows) {
//...
}
);
Bezpečné a jednoduché:
connection.query(
"SELECT * FROM player WHERE nick = ? AND pass = ?", [data.login, data.pass],
function (err, rows) {
// ...
}
);
Další informace
Další informace naleznete v dokumentech: