SQLi安全吗?使用OR的多个.where请求

时间:2016-10-13 13:38:22

标签: ruby-on-rails ruby-on-rails-5

使用Rails 5.这是安全的,还是可以SQL注入?

(这是我在网站上选择region_ids的表格)

# results = results.joins(:regionmemberships).where("regionmemberships.region_id = ? OR regionmemberships.region_id = ?", 0, 2) if region_id.present?

我已经读过results.where('regionmemberships.region_id = ?', region_id)

..是安全的。但是,使用OR也是安全的第一个声明吗?

或者有更安全的方式来写这个吗?

2 个答案:

答案 0 :(得分:1)

安全吗?它比以前安全得多:

"regionmemberships.region_id = #{ params[:region_id] }
 OR regionmemberships.region_id = #{ params[:other_id] }"

因为它使用参数化查询来阻止SQL注入。但是,您不需要首先从字符串构造SQL:

results.joins(:regionmemberships)
       .where(regionmemberships: { region_id: params[:region_id] })

您还可以在以下位置使用数组:

results.joins(:regionmemberships)
           .where(regionmemberships: { region_id: [1,2,5] })

它会产生:

WHERE regionmemberships.region_id IN (1,2,5)

哪个比使用OR更好。

答案 1 :(得分:-2)

SELECT c.*, COUNT(m.cid) AS count FROM councils AS c LEFT JOIN membership AS m ON c.id = m.cid GROUP BY c.id