0
关于how can I use like query in ruby with sinatra?问题的下列问题,我有以下问题从注入保护我的sql。这里是我的方法来从类型字符串进行查询,它接收av(alue)搜索和ak EY)(=字段)来去看你。 ,各种selctions被selection.join(' and ')
使用activerecord防止sql注入
def string_selector(k, v)
case
when v[/\|/]
v.scan(/([^\|]+)(\|)([^\|]+)/).map {|p| "lower(#{k}) LIKE '%#{p.first.downcase}%' or lower(#{k}) LIKE '%#{p.last.downcase}%'"}
when v[/[<>=]/]
v.scan(/(<=?|>=?|=)([^<>=]+)/).map { |part| p part; "#{k} #{part.first} '#{part.last.strip}'"}
else
# "lower(#{k}) LIKE '%#{v.downcase}%'" #(works)
("lower(#{k}) LIKE ?", '%#{v.downcase}%') #doesn't work
end
end
加盟之后,但我得到的错误
selectors.rb:38: syntax error, unexpected keyword_end, expecting $end
from C:/../1.9.1/rubygems/core_ext/kernel_require.rb:55:in `require'
什么可能我是做错了什么?
thnx kardeiz但我得到错误“未定义的方法匹配”为#(NoMethodError)“当我使用Arel表上的匹配时,我尝试使用activerecord哈希和方法进行查询,但失败,有很多条件可以在多个表上进行组合,所以我使用普通的sql。我害怕通过使用sql我不能防止注入本书的信件后,但已经发现,通过使用LIKE注入也不工作,所以我将不得不继续进行,恐怕 –
peter
你不能在'Arel :: Table'上调用'matches',它需要在Arel属性上调用。在我的例子中,'tbl [k]'是定义的'Arel :: Table'' tbl'上''的'Arel :: Attribute'。 –
啊我看到了,对不起,在一个小测试中,我会尝试将它集成到我的查询设计中 – peter