使用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也是安全的第一个声明吗?
或者有更安全的方式来写这个吗?
答案 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