整数和注射防护

时间:2017-11-02 10:39:51

标签: javascript sql sql-injection

我正在使用nodejs。在创建一个vanilla sql查询时,我有这个:

var id = req.body.id;
var query = "select from table where id = " + id;

现在,我所知道的是你应该以这种方式转义整数:

var id = parseInt(req.body.id);

这是对的吗?或者你应该像字符串一样逃脱?还是根本不逃避?

2 个答案:

答案 0 :(得分:3)

  

这是对的吗?

不,不是远程。

  

或者你应该像字符串一样逃脱?

没有。也不应该转义字符串。

  

或者根本不逃避?

对于数字字符串(和其他),使用您正在使用的数据库API的参数化版本(“预备语句”或类似的),不要“逃避”事情。

例如,假设您使用的是mysql npm module。每the documentation,该查询将是:

connection.query('select from table where id = ?', [req.body.id], function (error, results, fields) {
  // ...
});

将“逃逸”留给提供API的模块。如果您使用的是信誉良好的产品,那么它已经过全面测试和经过实战验证,而不是任何临时解决方案。

更多:http://bobby-tables.com/

答案 1 :(得分:1)

使用清洁剂清除SQL注入的输入。

https://www.npmjs.com/package/sanitizer