Czy można zapobiec iniekcjom SQL w Node.js (najlepiej za pomocą modułu) w taki sam sposób, w jaki PHP miał przygotowane instrukcje, które chroniły przed nimi.
Jeśli tak to jak? Jeśli nie, to jakie przykłady mogą ominąć podany przeze mnie kod (patrz poniżej).
Jakiś kontekst:
Tworzę aplikację internetową ze stosem zaplecza składającym się z Node.js + MySql przy użyciu modułu node-mysql . Z punktu widzenia użyteczności moduł jest świetny, ale nie zaimplementował jeszcze czegoś podobnego do gotowych instrukcji PHP (chociaż wiem, że jest to w todo ).
Z mojego zrozumienia wynika, że implementacja w PHP gotowych instrukcji, między innymi, bardzo pomogła w zapobieganiu wstrzyknięciom SQL. Martwię się jednak, że moja aplikacja node.js może być podatna na podobne ataki, nawet jeśli domyślnie wprowadzono znaki ucieczki (jak we fragmencie kodu poniżej).
node-mysql wydaje się być najpopularniejszym łącznikiem mysql dla node.js, więc zastanawiałem się, co inne osoby mogą robić (jeśli cokolwiek), aby rozwiązać ten problem - lub czy jest to nawet problem z node.js na początek (nie jestem pewien, jak by to nie wyglądało, ponieważ w grę wchodzą dane wejściowe po stronie użytkownika / klienta).
Czy powinienem na razie przełączyć się na node-mysql-native , skoro zapewnia on przygotowane instrukcje? Waham się, czy to zrobić, ponieważ nie wydaje się być tak aktywny jak node-mysql (choć może to po prostu oznaczać, że jest kompletny).
Oto fragment kodu rejestracji użytkownika, który używa modułu sanitizer , wraz z przygotowaną składnią podobną do instrukcji node-mysql (która, jak wspomniałem powyżej, wykonuje znaki ucieczki), aby zapobiec odpowiednio skryptom krzyżowym i wstrzyknięciom sql:
// Prevent xss
var clean_user = sanitizer.sanitize(username);
// assume password is hashed already
var post = {Username: clean_user, Password: hash};
// This just uses connection.escape() underneath
var query = connection.query('INSERT INTO users SET ?', post,
function(err, results)
{
// Can a Sql injection happen here?
});