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. 在條件GET請求中刪除Cookie
- 2. 如何在請求結束之前在Rails中保持會話?
- 3. Rails理解GET請求,但不支持POST請求
- 4. 刪除時請求方法GET不支持
- 5. GET請求刪除POST信息
- 6. Rails測試中的HTTP請求'刪除'
- 7. 使用GET請求的Rails窗體:如何刪除按鈕和utf8參數?
- 8. 在Rails中保存用戶url請求(get&post)
- 9. 在Rails中使用HTTP GET請求進行CSRF保護
- 10. 如何刪除邀請請求通知?
- 11. 如何從ASINetworkQueue中刪除請求
- 12. 如何刪除redundante在SQL請求
- 13. 保持與請求
- 14. Ajax刪除請求ReactJS和Ruby on Rails
- 15. Rails&Nginx刪除請求 - 405不允許
- 16. 如何在html中發送GET請求
- 17. 如何在AS3中發送GET請求?
- 18. 如何在GET請求中使用xpath?
- 19. 如何在CAKEPHP中訪問GET請求?
- 20. 在GET請求
- 21. Rails中的異步GET請求
- 22. 在python下使用保持連接的連接GET請求
- 23. 如何在Express中實現GET請求的CSRF保護?
- 24. Rails 3.2.11獲取請求時,其實是一個刪除請求
- 25. 如何保持活着請求
- 26. 如何在POST請求中獲取GET和POST請求參數?
- 27. 如何在GET請求中從API請求特定元素?
- 28. 如何在codeigniter中檢查請求是POST還是GET請求?
- 29. 保留GET請求中的值
- 30. Ruby on Rails:如何讓對象在許多請求中保持活動狀態?