2010-01-03 51 views

回答

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$)/}