Niet doen
U vraagt naar de verkeerde oplossing voor het probleem.
Om de apostrofs te vervangen door backslash-apostrofs kunt u het volgende gebruiken:
str = msg.replace(/'/g, '\\\'');
maar dat moet je niet doen . Ik geef alleen die informatie omdat dat is waar uw vraag over gaat, maar lees hieronder.
Waarom het een slecht idee is
Je zou het niet aan de client-kant moeten doen en je zou ook niet aan de server-kant moeten doen. Als het vermijden van kwetsbaarheden door SQL-injectie een kwestie was van het vervangen van apostrofs door backslash-apostrofs, dan zou het geen probleem zijn. Helaas is het ingewikkelder.
Met de informatie die je hebt verstrekt, is het zelfs onmogelijk om te zeggen of backslash-apostrof zelfs zou doen wat je verwacht in de eerste plaats zonder je code te zien die de databasequery's daadwerkelijk maakt. Maar dat maakt niet uit, want dat zou je nooit moeten doen. Nooit. Bekijk die antwoorden om te zien waarom - die vragen gaan niet over SQL-injecties, maar de codevoorbeelden bevatten kwetsbaarheden voor SQL-injectie en de antwoorden leggen het uit:
- kan backtick niet gebruiken bij gebruik van nodejs 7.3.0
- Node js - Promise Weigering Waarschuwing bij het verwerken van veel gegevens
- Is het mogelijk om te luisteren naar objectinstantiatie in Node.js?
Verplichte strip
Wat u in plaats daarvan moet doen
Dat gezegd hebbende, je hebt niet verteld welke module je gebruikt om de database te doorzoeken, maar het maakt niet uit of je de mysql
gebruikt module of Sequelize of iets dat de moeite waard is, er moet altijd een mechanisme zijn om variabelen op een veilige manier te interpoleren zonder handmatig te ontsnappen en de strings aaneen te schakelen.
Voorbeelden
Je hebt zelfs geen enkele regel code getoond die hier relevant is, dus ik kan je niet vertellen hoe je dit kunt oplossen, maar beschouw dit voorbeeld:
Onveilig:
connection.query(
"SELECT * FROM player WHERE nick = '"
+ data.login + "' AND pass = '" + data.pass + "'",
function (err, rows) {
//...
}
);
Nog steeds onveilig, complex, onleesbaar, onhoudbaar en onbetrouwbaar:
connection.query(
"SELECT * FROM player WHERE nick = '"
+ data.login.replace(/'/g, '\\\'') + "' AND pass = '" + data.pass.replace(/'/g, '\\\'') + "'",
function (err, rows) {
//...
}
);
Veilig en eenvoudig:
connection.query(
"SELECT * FROM player WHERE nick = ? AND pass = ?", [data.login, data.pass],
function (err, rows) {
// ...
}
);
Meer info
Zie de documenten voor meer informatie: