2014-06-05 2 views
0
Customer.find(:all, :select => 'id', :order => 'updated_at DESC', :readonly => true, :conditions => { :status_id => Customer.id_for_status(params[:id].to_sym) }, :offset => offset, :limit => 30).collect(&:id) 

est dessus de ma requête dans ce que j'obtiens avertissement similaireAvertissement Obtenir: déni de service

Symbol conversion from unsafe string (parameter value) near line 33: params[:id].to_sym 

Ceci est l'avertissement de déni de service. Quelqu'un at-il une idée de comment puis-je réparer cet avertissement?

Merci à l'avance

+1

La méthode 'id_for_status' peut-elle être modifiée pour accepter une chaîne au lieu d'un symbole? – Baldrick

+0

Juste une supposition éclairée: Essayez de tronquer à une longueur maximale raisonnable: 'params [: id] [0 ... 20] .to_sym'. Ma conjecture est que les rails essayent de vous protéger d'utiliser une énorme quantité d'espace interne de symbole (une fois qu'un symbole est utilisé, l'espace contenant ses caractères n'est jamais libéré). Si cela ne fonctionne pas, vous devrez valider le paramètre avant la conversion du symbole. – Gene

+0

merci @Baldrick, ça marche –

Répondre

3

Le problème ici est params [: id] .to_sym

Lorsque la chaîne qui serait converti en symbole est un ouvrir le jeu, vous ne devriez pas les convertir en symboles Chaque symbole créé ne sera pas collecté et pourrait créer une fuite de mémoire potentielle rendant votre système vulnérable aux attaques Dos.

Le problème a été résolu dans Ruby 2.2. mais encore - plutôt blanc liste tout ce qui serait converti en symboles.

Questions connexes