我应该逃脱我的铁轨找到的条件吗?

Mat*_*iby 3 ruby ruby-on-rails ruby-on-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")
Run Code Online (Sandbox Code Playgroud)

和我的路线文件有

 map.apps_wishlist '/apps/wishlist', :controller => 'apps', :action => 'index', :state => 'wishlist' 
Run Code Online (Sandbox Code Playgroud)

因为我发送字符串应该以某种方式逃避sql出于安全原因,如果是这样,最好的方法是如何做到这一点

有人建议他们认为params [:state]在出于安全原因放入SQL查询时应该被转义

Fre*_*ung 5

他们不知道他们在谈论什么.只要你做任何一件事

SomeModel.where(:conditions => {:state => params[:state]})
#or
SomeModel.find(:conditions => {:state => params[:state]})
#or
SomeModel.where("state = ?", params[:state])
Run Code Online (Sandbox Code Playgroud)

ActiveRecord的将处理所有的逃逸本身,所以您在上面给出的代码是正确的/它没有涵盖的唯一情况是如果你对自己的完全建立的sql,即不要

SomeModel.where("state = #{params[:state]}")
Run Code Online (Sandbox Code Playgroud)

如果您使用find_by_sql,execute等等,那么你也有责任逃逸.不要只是接受我的话 - 试试吧!您可能还想查看rails 安全指南