Rails order 方法会导致 SQL Injection 吗?

niedhui · 2014年01月20日 · 最后由 niedhui 回复于 2014年01月20日 · 2428 次阅读

正常是这样的,

order_str = 'id desc'
Post.order(order_str)

但是 order_str 可能是用户输入的,假如

order_str = 'id desc; DELETE from USERS ;'
Post.order(order_str)

后台看到

  Post Load (0.5ms) SELECT `posts`.* FROM `posts` ORDER BY id desc; DELETE from USERS 
Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near

SQL 语句是出来的,但攻击就失败了,是 AR 做了防护吗?我是可以给 order_str 加个 whitelist 的,但有点好奇这里为什么会攻击失败。。求指点

参考: rails-sqli

因为调用的 sql driver 是执行单句查询,不支持加;的多句 sql 语句。 如果不用白名单过滤话,在你附上的文档里面已经解释了可以用 order 来做值猜测(不过没有人在数据库存明文密码吧...),还可以用来做复杂的 sql 计算实现 DDOS 目的。

#1 楼 @quakewang 还可以用来做复杂的 sql 计算实现 DDOS 目的!!!!

多谢大神

需要 登录 后方可回复, 如果你还没有账号请 注册新账号