2012-02-12 16 views
3

OKので、私は、この条件私のレールのための条件を逃れるべきでしょうか?

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を構築している場合/それがカバーしていない唯一のケースである、自分自身をエスケープ処理しますあなた自身、あなたがfind_by_sqlexecuteを使用している場合、すなわちはない

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

をしますかというように、あなたもエスケープする責任があります。それでも私の言葉を取るだけではありません - 試してみてください!あなたはまた、レールを見たいかもしれませんsecurity guide

関連する問題