2010-10-28 33 views
1

我正在根據Ruby on Rails Guide在我的Rails應用上設置安全性。Rails CSRF用戶對策編輯和更新

我的理解是,用戶控制器(我用來呈現我的用戶設置視圖)中的'編輯'方法應該只提交GET請求,並且'update'方法提交POST請求。但是當我想驗證不同方法的請求類型時,請執行以下操作:

#UsersController 
verify :method => :post, :only => [:update], :redirect_to => {:action => :show} 

該應用程序不保存對用戶設置所做的任何更改。如果我將驗證更改爲

verify :method => :post, :only => [:update, :edit], :redirect_to => {:action => :show} 

我甚至無法呈現設置視圖。

StackOverflow通常在教育我對不太瞭解的領域很有幫助,任何人都知道可能會發生什麼?

回答

1

你很近,但有點關閉。這裏有七個REST風格的路線,他們用什麼方法:

  1. 指數:GET
  2. 顯示:GET
  3. 新:GET
  4. 創建:POST
  5. 編輯:GET
  6. 更新:PUT
  7. 破壞:刪除

正如你所看到的,更新需要一個PUT。這是使用POST創建的。這應該解決它:

verify :method => :put, :only => [:update], :redirect_to => {:action => :show} 
+0

太好了,謝謝!這裏的句子就是我所說的:「如果你的web應用程序是RESTful的,你可能會習慣於額外的HTTP動詞,比如PUT或DELETE。但是現在的大多數瀏覽器都不支持它們 - 只有GET和POST。 Rails使用一個隱藏的_method字段來處理這個障礙。「但我猜Rails處理它 – kateray 2010-10-28 17:02:43

+0

是的,它確實如此。這是一個必要的罪惡,直到瀏覽器趕上:) – 2010-10-28 18:53:27