2016-11-04 3 views
1

Может ли кто-нибудь сказать мне, как мне избежать входных значений, чтобы предотвратить SQL-инъекцию? У меня есть приложение для проверки подлинности пользователя, и мне нужно каким-то образом импортировать некоторую безопасность.Sqlite как избежать значений, чтобы предотвратить SQL-инъекцию

Моя проверка выглядит следующим образом:

//Validation 
req.checkBody('name', 'Name is required').notEmpty(); 
req.checkBody('email', 'Email is required').notEmpty(); 
req.checkBody('email', 'Email is not valid').isEmail(); 
req.checkBody('password', 'Password is required').notEmpty(); 
req.checkBody('password', 'Password must have at least 6 characters').len(6,20); 
req.checkBody('password2', 'Passwords do not match').equals(req.body.password); 

И тогда я INSERT некоторые значения следующим образом:

var stmt = db.prepare("INSERT INTO users (id, name, email, password, salt) VALUES (NULL, ?, ?, ?, ?)"); 
       stmt.run([ name, hashEmail(email,'salt'), hashPassword(password,'salt'), 'salt'], function(error){ //..... 

Мне сказали, что это на самом деле не безопасный способ импортировать значения, но до тех пор, поскольку я не очень разбираюсь в безопасности в Интернете, я бы потребовал от вас некоторой помощи.

С уважением

+3

Ваш код не уязвим для инъекций sql. у вас все хорошо: https://github.com/mapbox/node-sqlite3/issues/57 –

+0

Спасибо, посмотрим. –

+1

Значения в параметрах ('?') Do * not * должны быть экранированы. –

ответ

3

Как вы уже используете параметризованный запрос правильно (вместо построения строки SQL, смешанную с параметрами запроса, вы использовали ? в запросе для обозначения места, где параметры будут заменены, когда SQL заявление выполненный), Ваш код, показанный выше, уже прекрасен и не уязвим для SQL-инъекции.

Он будет уязвим только для SQLi, если вы соедините эти переменные с самой строкой SQL.

+0

Спасибо за разъяснение :) –