【发布时间】:2014-08-19 01:25:54
【问题描述】:
我有一个 sqlite 查询,我正在研究参数化以避免互联网上的不良 sql 注入...
比如:
Select * From myTable Where id = $id
如果我在某处定义了 $id 并将其作为参数传递给我的数据库调用,那很好。
paramters.$id = 150;
db.all(myQuery, parameters, function (err, rows) {
results = rows;
});
我想知道我是否需要不遗余力地对排序和分页的内容进行参数化(两者都是用户可以提供的输入)...
我试图做类似的事情:
var sorter = JSON.parse(value);
parameters.$sortMethod = sorter.method;
parameters.$sortOrder = sorter.order;
sort_filter += 'ORDER BY $sortMethod $sortOrder';
虽然没有骰子。我猜 sqlite3 只是不允许您参数化 ORDER、LIMIT 和 OFFSET 中的内容。我认为确实有一些鬼鬼祟祟的事情,也许人们可以通过按顺序过早地结束一个 sqlite 语句然后创建一个新的恶意语句来做,但也许 SQLITE3 一次只能让你执行一个语句 (http://www.qtcentre.org/threads/54748-Execute-multiple-sql-command-in-SQLITE3)
我不应该担心订单限制和偏移的参数化吗?作为参考,我正在使用这个 sqlite 库在 node.js 上运行它:https://github.com/mapbox/node-sqlite3
非常感谢!
【问题讨论】:
标签: sql node.js sqlite code-injection