Rails sql注入自定义“where”子句

时间:2012-10-19 08:41:13

标签: ruby-on-rails security activerecord sql-injection

我正在为模型构建一个自定义where子句,我想知道我这样做的方式是否是针对sql注入攻击的安全方法。 这是我的方法:

def self.search(search)
  if search
    conditions = []
    conditions << [ 'name like ?', search[:name] ] unless search[:name].blank?
    conditions << [ 'product_type_id = ?', search[:product_type_id] ] unless search[:product_type_id].blank?

    conditions = ( conditions.empty? ? nil : [conditions.transpose.first.join(' and '), *conditions.transpose.last] )
    where(conditions)
  else
    scoped
  end
end

你觉得怎么样? 提前谢谢!

1 个答案:

答案 0 :(得分:1)

是。这是针对sql注入攻击的安全方法。

以下是不安全的示例

conditions << [ "name like  #{search[:name]}" ]