2012-02-12 57 views
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 [:國家]應該爲了安全原因放入SQL查詢時逃脫

回答

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等等,那麼你也有責任逃逸。不要只是聽我說 - 試試吧!你可能也想看看鐵軌security guide

相關問題