NodeJS和MariaDB。避免查询每一列

时间:2018-11-15 17:14:02

标签: mysql node.js mariadb sql-injection handle

我正在使用NodeJS和MariaDB。我有很多表,其中一些用户可以通过请求更改值。我不想为用户想要更新的每一列准备查询,例如:

module.exports.updateName = (name,id) =>{
    return pool.query("UPDATE Users SET name=? WHERE user_id=?;", [name,id])
}
module.exports.updateAge = (name,id) =>{
    return pool.query("UPDATE Users SET age=? WHERE user_id=?;", [age,id])
}

我要建造就像一个需要表格,列和值的模板。 为了防止SQL注入攻击,我已经在使用?值的占位符。不幸的是,MariaDB不支持诸如??之类的标识符的占位符。 仅将表名或列与查询字符串连接起来并不安全,

"SELECT INTO " + tablename +"(" + columns + ")" ...

我的想法是在每次服务器启动时进行查询,数据库中存在哪些表名和列名,并将它们存储在列表中。然后,我可以检查所传递的表和列字符串是否有效。

这个想法有意义吗?如何解决这个问题? 我很感谢每一个建议!

问候

1 个答案:

答案 0 :(得分:0)

好吧,我要做的是创建一个包含参数,用户,列,值的存储过程,并且在其中确定要使用的更新语句,如下所示:

create procedure updateValues (in uid int, in columnid int, in value int)...
begin
    if columnid = 0 then
       update users set name = value;
    else if columnid = 1 then
       update users set age = value;
    end if
end