SQLi 安全吗?使用 OR 的多个 .where 请求
SQLi safe? Multiple .where request using OR
使用 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 时,第一个语句是否也安全?
或者有更安全的写法吗?
安全吗?嗯,它比:
更安全
"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
更好。
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
使用 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 时,第一个语句是否也安全?
或者有更安全的写法吗?
安全吗?嗯,它比:
更安全"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
更好。
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