ave*_*ave 9 security ruby-on-rails ruby-on-rails-4
如果使用ActiveRecord无法有效表达查询,那么ActiveRecord::Base.connection.execute在插入传递params属性时如何安全使用?
connection.execute "... #{params[:search]} ..."
Run Code Online (Sandbox Code Playgroud)
Sha*_*ell 11
您可以使用ActiveRecord :: Sanitization :: ClassMethods中的方法.
您必须要小心谨慎,因为它们受到保护,因此只能用于ActiveRecord::Base子类.
在模型类中,您可以执行以下操作:
class MyModel < ActiveRecord::Base
def bespoke_query(params)
query = sanitize_sql(['select * from somewhere where a = ?', params[:search]])
connection.execute(query)
end
end
Run Code Online (Sandbox Code Playgroud)
您也可以通过send该方法在控制台上进行尝试:
> MyModel.send(:sanitize_sql, ["Evening Officer ?", "'Dibble'"])
=> "Evening Officer '\\'Dibble\\''"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6217 次 |
| 最近记录: |