我应该对我的Rails查找条件进行转义吗?

3

好的,我有一个问题需要解决。

conditions = {}
conditions[:state] = params[:state] if params[:state]
@apps = current.apps.paginate(:include => :user, :conditions => conditions, :order => "users.first_name, users.last_name")

我的路由文件具有以下内容:

 map.apps_wishlist '/apps/wishlist', :controller => 'apps', :action => 'index', :state => 'wishlist' 

由于我正在发送字符串,出于安全原因我是否应该以某种方式转义sql,如果是的话,最好的方法是什么

有人建议认为当将params[:state]放入SQL查询时,应进行转义,以提高安全性

1个回答

5
他们不知道他们在说什么。只要你做其中之一即可。
SomeModel.where(:conditions => {:state => params[:state]})
#or
SomeModel.find(:conditions => {:state => params[:state]})
#or
SomeModel.where("state = ?", params[:state])

ActiveRecord会处理所有的转义,因此你上面给出的代码是可以的。它唯一不能覆盖的情况是,如果你完全自己构建sql语句,即不要这么做。

SomeModel.where("state = #{params[:state]}")

如果您正在使用find_by_sqlexecute等方法,那么您也需要负责转义。不要仅仅相信我的话-试一试吧!您可能还想查看Rails 安全指南


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接