Pamiętaj, że wstrzyknięcia SQL są spowodowane interpretacją wrogich ciągów znaków jako poleceń, a nie przez blokowanie poleceń. Czy jesteś pewien, że otrzymujesz oryginalny ciąg, a nie wersję skróconą?
Na przykład jest ogromna różnica między tymi dwoma:"test"
i "'test'"
.
Generalnie unika się tylko szkodliwych postaci, reszta pozostaje bez zmian.
Najlepiej unikać korzystania z niskopoziomowego sterownika. Spróbuj użyć biblioteki takiej jak Sequelize aby zapewnić trochę abstrakcji i więcej wsparcia. Ten moduł obsługuje wyrażenia zastępcze, które zazwyczaj sprawiają, że ucieczka nie jest problemem, jest obsługiwana automatycznie.
Zobacz sekcję dotyczącą nieprzetworzonych zapytań z zamiennikami gdzie masz taką możliwość:
sequelize.query('SELECT * FROM projects WHERE status = ?',
{ replacements: ['active'], type: sequelize.QueryTypes.SELECT }
).then(function(projects) {
console.log(projects)
})
Nie ma ryzyka wycieku danych użytkownika, ponieważ podałeś je jako jawną wartość, która jest prawidłowo obsługiwana, a nie wbudowany ciąg w zapytaniu.