Rails中的sql注入

Posted

技术标签:

【中文标题】Rails中的sql注入【英文标题】:sql injection in rails 【发布时间】:2013-11-24 14:57:42 【问题描述】:

是否有可能在 Rails 中,如果发现 sql 注入漏洞,任何人都可以删除表。我看到一篇文章说 Rails 只执行单个 sql 语句,例如,如果我像这样运行原始 sql

ActiveRecord::Base.connection.execute("select * from users; drop table test_table;")

抛出异常

这是否适用于所有的 rails activerecord 助手是否有任何其他方法可以删除表?

【问题讨论】:

【参考方案1】:

这个漏洞是什么?

该错误允许通过动态查找器方法进行 SQL 注入(例如 find_by_foo(params[:foo]))。我会稍微解释一下动态查找器。 该错误影响所有 Ruby on Rails 版本。

一个已知的可利用场景是当以下所有条件都适用时: 您正在使用 Authlogic(第三方但流行的身份验证库)。 您必须知道会话秘密令牌。

还有其他可利用的场景,但这实际上取决于您的应用在做什么。由于无法证明某些东西不安全,因此即使您认为自己没有受到影响,您也应该认真对待漏洞并进行升级。

这个漏洞不是什么?

对于那些了解 Rails 的人:

该错误不会影响正常的查找器方法(例如 find(params[:id]))。 该漏洞无法通过请求参数加以利用。 该错误不在 Authlogic 中。它在 Rails 中。恰好 Authlogic 触发了它。 Devise(另一个第三方身份验证库)不会触发该错误。 “params”案例,是一个完全不同且不相关的问题。那里描述的问题非常严重,值得认真关注,因此请密切关注任何新的建议。

更多信息请参见rails sql injection

【讨论】:

我已经浏览了所有可能的关于 sql 注入的文档,但是你无法在 sql 注入中删除一个表。

以上是关于Rails中的sql注入的主要内容,如果未能解决你的问题,请参考以下文章

Rails SQL注入?

在 Rails 中保护 SQL 注入

Rails Brakeman:Arel 的 SQL 注入

如何在 order rails 查询中修复 sql 注入

这个 Rails 3 搜索是不是容易受到 SQL 注入的攻击?

ruby on rails sql 注入 LIKE '%#argument% 易受攻击?