2012-02-12 1 views
3

OK donc j'avoir cette conditionDois-je échapper à la condition de trouver mes rails?

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

et mon fichier routes a

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

Depuis que je vous envoie dans la chaîne devrais-je échapper à la sql en quelque sorte pour des raisons de sécurité et si oui, comment est le meilleur façon de le faire

Quelqu'un a suggéré qu'ils pensent les params [:] état doivent être échappés lors de la mise dans la requête SQL pour des raisons de sécurité

Répondre

5

Ils ne savent pas de quoi ils parlent. Tant que vous faites soit

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

ActiveRecord traitera tout lui-même s'échapper, de sorte que le code que vous avez donné ci-dessus est bien/Le seul cas, il ne couvre pas est si vous construisiez le sql entièrement vos propres, à savoir ne pas faire

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

Si vous utilisez find_by_sql, execute et ainsi de suite alors vous êtes également responsable de la fuite. Ne me prenez pas au mot, essayez-le! Vous pourriez également vouloir regarder les rails security guide

Questions connexes