我正在使用nodejs。在创建一个vanilla sql查询时,我有这个:
var id = req.body.id;
var query = "select from table where id = " + id;
现在,我所知道的是你应该以这种方式转义整数:
var id = parseInt(req.body.id);
这是对的吗?或者你应该像字符串一样逃脱?还是根本不逃避?
答案 0 :(得分:3)
这是对的吗?
不,不是远程。
或者你应该像字符串一样逃脱?
没有。也不应该你转义字符串。
或者根本不逃避?
对于数字和字符串(和其他),使用您正在使用的数据库API的参数化版本(“预备语句”或类似的),不要“逃避”事情。
例如,假设您使用的是mysql
npm module。每the documentation,该查询将是:
connection.query('select from table where id = ?', [req.body.id], function (error, results, fields) {
// ...
});
将“逃逸”留给提供API的模块。如果您使用的是信誉良好的产品,那么它已经过全面测试和经过实战验证,而不是任何临时解决方案。
答案 1 :(得分:1)
使用清洁剂清除SQL注入的输入。