Rails应该奇迹般地看到请求是“DELETE”还是“GET”请求,对吧?我可以打http://localhost/controller/destroy/1
,它会删除记录。开发人员通常如何防止这种愚蠢的删除?如何保持在Rails中删除GET请求
1
A
回答
7
这是很好的做法,从你的路由文件的底部删除下列生成路线:
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
由于这些可以离开敞开大门猜测的一样,破坏破坏性操作。我尝试通过使用命名路线来明确哪些路线是允许的并且map.resources
3
这里有一个潜在的问题。
HTML规范没有办法产生PUT或DELETE请求。在Rails和大多数其他RESTful Web应用程序中,PUT和DELETE请求通过Javascript onclick属性伪造。因此,在没有启用Javascript的情况下,处理来自浏览器的销毁请求是非常有用的。伪造通过将DELETE方法的隐藏表单提交给资源发生。此表单包含您的应用程序的真实性标记。其次,我相信这种行为来自默认路由。在您的routes.rb文件中使用map.resource(s)
的rails中的RESTful资源。不应该生成该路线。您可能会注意到/controller/destroy/:id
未被rake routes
列出,但它确实符合:controller/:action/:id
形式的默认路由。你会发现注释掉默认路由将会阻止你不希望发生的行为。如果你正在小心地定义所有将被使用的资源和路由,这应该不成问题。
如果您不想完全删除默认路由,您可以添加一个要求,以便销毁或任何其他有害行为不匹配。
map.connect ':controller/:action/:id',
:requirements => {:action => /^(?!destroy$)/}
map.connect ':controller/:action/:id.format',
:requirements => {:action => /^(?!destroy$)/}
相关问题
- 1. Rails理解GET请求,但不支持POST请求
- 2. 在Rails中使用HTTP GET请求进行CSRF保护
- 3. 如何删除邀请请求通知?
- 4. 如何删除redundante在SQL请求
- 5. 保持与请求
- 6. 如何在AS3中发送GET请求?
- 7. 如何在CAKEPHP中访问GET请求?
- 8. Rails中的异步GET请求
- 9. Rails 3.2.11获取请求时,其实是一个删除请求
- 10. 如何保持活着请求
- 11. 如何在codeigniter中检查请求是POST还是GET请求?
- 12. 如何在GET请求中从API请求特定元素?
- 13. 保留GET请求中的值
- 14. AngularJS Spring CRUD删除405不支持请求方法'删除'
- 15. 如何使GET RESTful请求
- 16. 如何使用GET请求
- 17. 有什么办法从GET请求中删除提交按钮?
- 18. MVC从url中删除“index.php”和“GET”请求
- 19. 从请求中删除default.aspx
- 20. HTTP删除请求中J2ME
- 21. Node.js删除请求
- 22. Foursquare删除请求
- 23. 不支持请求方法'GET'更改后发生错误@GetMapping删除方法
- 24. 如何删除'?'在GET的URL中?
- 25. 如何删除的xmlns =“”从XML请求
- 26. API请求Coldfusion(GET请求)
- 27. 方法不支持请求体:GET
- 28. 请求方法“GET”不支持
- 29. SpringMVC请求方法'GET'不支持?
- 30. 如何通过在GET请求列表