gro*_*426 2 ruby sql join ruby-on-rails
我试图通过在连接上替换我的参数来避免任何SQL注入漏洞.
Category.joins("LEFT OUTER JOIN incomes ON incomes.category_id = categories.id AND incomes.dept_id = ?", params[:Dept])
Run Code Online (Sandbox Code Playgroud)
这会尝试在其中执行带有问号的查询,而不是将其替换为param.这样做的正确方法是什么?
编辑:
查询需要返回:
SELECT categories.*
FROM "categories"
LEFT OUTER JOIN incomes
ON incomes.category_id = categories.id AND incomes.dept_id = 86
Run Code Online (Sandbox Code Playgroud)
不
SELECT categories.*
FROM "categories"
LEFT OUTER JOIN incomes
ON incomes.category_id = categories.id
WHERE incomes.dept_id = 86
Run Code Online (Sandbox Code Playgroud)
效果差异很大!
一种选择是使用sanitize_sql_array方法.但是,它是一种受保护的方法,因此在您的类别模型中,您可以执
class Category < ActiveRecord::Base
def self.income_for_dept(dept)
Category.joins(sanitize_sql_array(["LEFT OUTER JOIN incomes ON incomes.category_id = categories.id AND incomes.dept_id = ?", dept]))
end
end
Run Code Online (Sandbox Code Playgroud)
然后你会称之为:
Category.income_for_dept(params[:Dept])
Run Code Online (Sandbox Code Playgroud)
如果需要,Ruby提供了一些其他方法来获取该方法,而无需在Category中创建类方法.
| 归档时间: |
|
| 查看次数: |
1082 次 |
| 最近记录: |