【问题标题】:Sequelize where option sql injection?Sequelize where option sql injection?
【发布时间】:2019-03-14 11:44:06
【问题描述】:

以下 sequelize 调用是否易受 sql 注入攻击?

var dataDirectlyFromTheUserWithoutValidation = req.query.filter 
Record.findAll({where: dataDirectlyFromTheUserWithoutValidation})

【问题讨论】:

  • 锻炼它。使用 bobby tables 攻击进行 PEN 测试。

标签: node.js sequelize.js


【解决方案1】:

是的,适用于低于 4 的版本。

该库在SELECT 查询组合的source code 中包含一条注释,该注释指出,

如果使用字符串,则必须自行转义。

Sequelize 将未转义和未参数化的 options.where 哈希值插入到由目标引擎执行的字符串中(我只检查了 MSSQL)。

因此,调用者需要注意清理任何用户输入,以减轻其应用程序中可能存在的 sql 注入漏洞。

作者claim to have addressed此漏洞从 v4 开始。从 v3.16 开始,已经解决了与 ORDERLIMIT 子句相关的其他漏洞。

【讨论】:

  • 但在 4.0 以上不消毒/转义就可以安全使用?警告还在源代码中?
  • its complicated... 也可以是depend on the connected rdbms。警告仍然存在,但它适用于对未通过findAll 直接公开的内部辅助函数的调用。鉴于past history 发现和缓解的漏洞,我真的会备份并发送类似“bye');drop table students;--”之类的内容到测试数据库。或许我们可以吸引其中一位原作者参与专家的陈述。
  • 我认为在选项对象中使用非转义字符串是安全的。如果您执行sequelize.query('SELECT * FROM projects WHERE status = something', 之类的操作,那么从用户传递给 sequelize.query 的字符串中的任何内容都会受到攻击。据我所知,你对 Franken 的查询是安全的。
猜你喜欢
  • 2016-12-17
  • 2021-02-22
  • 1970-01-01
  • 2015-10-02
  • 2016-02-05
  • 2019-03-13
  • 1970-01-01
  • 2021-04-05
  • 2020-09-16
相关资源
最近更新 更多