如何防止sql注入。我有这个SQL查询。
db.query('SELECT data FROM '+(server)+'.users WHERE user = 1');
答案 0 :(得分:0)
如果您使用的是npm mysql,则可以使用 为了避免SQL注入攻击,在SQL查询中使用任何用户提供的数据之前,应始终对其进行转义。您可以使用mysql.escape(),connection.escape()或pool.escape()方法来实现:
varuserId =='某些用户提供的值';
var sql ='SELECT * FROM用户WHERE id ='+ connection.escape(userId);
connection.query(sql,function(error,results,fields){
如果(错误)抛出错误;
// ...
});
或者,您可以使用?字符作为占位符,代表您希望这样逃避的值:
connection.query('SELECT * FROM users.WHEREid =?'',[userId],函数(错误,结果,字段){
如果(错误)抛出错误;
// ...
});
答案 1 :(得分:0)
除了参数化查询和转义用户输入外,要养成的一个好习惯是立即验证路由器中的所有用户输入值,以确保您能从用户那里得到期望。如果您使用的是Express,express-validator库对于验证输入非常有用。这是我为适应您的问题而修改的文档中的示例:
const { check, validationResult } = require('express-validator');
app.post('/user', [
// server must be a valid database
check('server').isIn([... list of valid databases ...])
], (req, res) => {
// Finds the validation errors in this request and wraps them in an object with handy functions
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(422).json({ errors: errors.array() });
}
db.query('SELECT data FROM '+(req.body.server)+'.users WHERE user = 1');
});