2010-01-03 3 views

Répondre

7

Il est bon de supprimer les éléments suivants itinéraires générés à partir du bas de votre fichier itinéraires:

map.connect ':controller/:action/:id' 
map.connect ':controller/:action/:id.:format' 

Comme ceux-ci peuvent laisser les portes ouvertes à devinables, des actions destructrices comme détruire. J'essaie d'être explicite quant aux routes autorisées en utilisant des routes nommées et map.resources

3

Il y a un peu un problème sous-jacent ici.

La spécification HTML ne permet pas de générer une requête PUT ou DELETE. Dans Rails et la plupart des autres applications Web RESTful, les requêtes PUT et DELETE sont forgées via une propriété Javascript onclick. Il est donc utile d'avoir autour de gérer les demandes de détruire des navigateurs sans Javascript activé. La contrefaçon se produit en soumettant un formulaire caché sur la méthode DELETE à la ressource. Ce formulaire contient le jeton d'authenticité pour votre application. Deuxièmement, je crois que ce comportement provient des routes par défaut. Utilisation de ressources RESTful dans des rails avec map.resource(s) dans votre fichier routes.rb. ne devrait pas générer cette route. Vous pouvez remarquer que /controller/destroy/:id n'est pas répertorié par rake routes, mais il correspond à la forme :controller/:action/:id de la route par défaut. Vous remarquerez que commenter les routes par défaut bloquera votre comportement indésirable. Si vous prenez soin de définir toutes les ressources et les routes qui seront utilisées, cela ne devrait pas poser de problème.

Si vous ne souhaitez pas supprimer complètement la route par défaut, vous pouvez ajouter une exigence à la valeur de sorte que la destruction ou toute autre action nuisible ne corresponde pas.

map.connect ':controller/:action/:id', 
    :requirements => {:action => /^(?!destroy$)/} 
map.connect ':controller/:action/:id.format', 
    :requirements => {:action => /^(?!destroy$)/} 
Questions connexes