首页 > 解决方案 > NodeJS 和 MariaDB。避免查询每一列

问题描述

我正在使用 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])
}

我想建立s.th。就像一个需要表格、列和值的模板。为了防止 SQL 注入攻击,我已经在使用?值的占位符。不幸的是,MariaDB 不支持 ?? 等标识符的占位符。将表名或列连接到查询字符串,我觉得不安全,例如:

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

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

这个想法是否有意义或者是一种常见的方式?将如何处理这个问题?我感谢每一个建议!

问候

标签: mysqlnode.jsmariadbsql-injectionhandle

解决方案


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

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

推荐阅读