ruby-on-rails - Rails 3 搜索是否容易受到 SQL 注入(inject)攻击?

标签 ruby-on-rails security ruby-on-rails-3 sql-injection

假设我在 Rails 3 应用程序的页面上有一个搜索框,您可以在其中按公司名称或城市搜索客户。在我的 Controller 的索引方法中,我这样做:

if params[:search]
  @clients = Client.where("clients.business_name LIKE :business_name OR clients.city = :city", :business_name => "%#{params[:search]}%", :city => params[:search])

这些哈希值被替换到 SQL 中并用引号引起来。如果我在搜索框中的输入包含引号或其他危险字符,我会看到它们在开发日志中被转义,例如:

...WHERE (clients.business_name LIKE '%Something\' DROP TABLE Foo%'...

或者

...WHERE... OR clients.city = 'Something OR 1=1')

因此,由于 OR 1=1 位于 Rails 添加的引号内,因此它只会生成与城市名称不匹配的内容,并且由于 DROP TABLE 中的引号尝试被转义,它也不会产生与企业名称的匹配。

这不是使用实际的准备好的语句,其中查询首先发送到数据库而不填充搜索值,然后将搜索值发送到数据库进行填充。我认为这是最安全的方法,但 Rails 不这样做;我认为这是因为它并非在所有数据库中都可用,而且实现也各不相同。

这是否以某种方式对 SQL 注入(inject)开放?我没有看到它,但同样,它没有使用准备好的语句,所以我想知道。 如果存在漏洞,我怎样才能更安全地执行此操作?

最佳答案

不,这里不存在 SQL 注入(inject)漏洞。 ActiveRecord 将对您作为第二个参数传递给 where 的哈希值调用 connection.quote,因此您是安全的。

我能想到的唯一潜在的 SQL 注入(inject)点是 connection.quote 中是否存在一些未被发现的错误,这是不太可能的。

关于ruby-on-rails - Rails 3 搜索是否容易受到 SQL 注入(inject)攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4269399/

相关文章:

ruby-on-rails - rails : Controlling browser back button

ruby-on-rails - 错误消息始终包含属性名称

ruby-on-rails - 是否可以对集合使用陈旧方法?

ruby-on-rails - 在 Ruby on Rails 中为帖子添加标签

ruby-on-rails - 仅 Twitter 应用程序授权

security - Ansible,Windows - 如何访问网络文件夹?

ruby-on-rails - 带有 ajax Action 的 Rails select_tag(Rails 3 和 jQuery)

javascript - 在 button_to click 上显示/隐藏 Rails 中的渲染

PHP preg_match 请帮忙。很简单

c# - WCF:缓存 SSL 数据