【发布时间】:2019-04-18 20:46:08
【问题描述】:
我正在使用 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 + ")" ...
我的想法是在每次服务器启动时查询我的数据库中存在哪些表名和列名,并将它们存储在一个列表中。然后我可以检查传递的表和列字符串是否有效。
这个想法是否有意义或者是一种常见的方式?将如何处理这个问题? 感谢您的每一个建议!
问候
【问题讨论】:
-
使用最终用户需要的尽可能多(或很少)子句构建查询。在应用程序代码中执行此操作,而不是 SQL。
-
你能举个例子吗?我不明白你的意思
标签: mysql node.js mariadb sql-injection handle