Rails est censé voir par magie qu'une requête est "DELETE" par rapport à "GET", n'est-ce pas? Je peux frapper http://localhost/controller/destroy/1
et il va supprimer l'enregistrement. Comment les développeurs empêchent-ils généralement une telle suppression idiote?Comment empêcher la suppression des requêtes GET dans Rails
Répondre
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
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$)/}
- 1. Rails: suppression des requêtes de base de données inutiles
- 2. Empêcher la suppression d'une balise dans Subversion
- 3. Safari 3.2.1 envoie des requêtes POST suivies de requêtes GET
- 4. Rails: comment modéliser des requêtes RESTful à travers des associations?
- 5. GET vs POST dans des rails
- 6. Formulaire multi-étapes utilisant des requêtes GET
- 7. Empêcher l'accès de modification des requêtes
- 8. Rails find_by_sql - comment lancer des requêtes génériques
- 9. Suppression des requêtes chevauchantes JQuery AJAX
- 10. Comment renvoyer une variable GET dans Rails?
- 11. Comment empêcher la mise en cache de requêtes asynchrones?
- 12. Complexe Rejoindre des requêtes dans Rails
- 13. Comment empêcher les requêtes NHibernate de renvoyer des sous-classes?
- 14. Filtrage des requêtes ActiveRecord dans les rails
- 15. Quelle est une meilleure façon d'effectuer une suppression des requêtes dans Rails Migration
- 16. Comment désactiver les requêtes GET à la page JSP?
- 17. Requêtes GET inter-domaines asynchrones
- 18. GWT - Création de requêtes GET
- 19. mod_rewrite avec les requêtes GET
- 20. Requêtes GET, sécurité et WebServices
- 21. Comment afficher les requêtes SQL exécutées dans la console Rails?
- 22. Comment empêcher la journalisation de certaines exceptions dans les rails
- 23. Projet d'installation de Visual Studio 2008, comment empêcher la suppression des dossiers lors de la désinstallation?
- 24. Comment répondre aux requêtes HTML effectuées via AJAX dans Rails
- 25. JavaBeans JSP traiter les requêtes GET
- 26. Rails Suppression du cache
- 27. jQuery $ .get et Rails
- 28. Suppression/"Rebasing" des migrations de rails
- 29. rails autocomplete question sur la suppression des informations superflues
- 30. Effectuer des opérations de suppression AJAX dans les rails