我使用REST和OAuth跟一個Rails應用程序(從一個iPhone應用程序,但不應該是相關的)。但是,我遇到了一些Rails的CSRF保護問題(通過protects_from_forgery
)。我知道CSRF保護只針對常規表單提交(即Content-Type = application/x-www-form-urlencoded),所以如果我提交JSON或XML數據,我會好起來的。不幸的是,OAuth目前僅限於application/x-www-form-urlencoded請求。有一個draft spec that extends OAuth to non-form-urlencoded data,但這現在沒有幫助我。軌,OAuth的,和CSRF保護
我看到它的方式,我有以下選擇:
發送數據作爲JSON,知道它不會是OAuth的簽名的組成部分,因而受人在the-中等攻擊。顯然不是一個有吸引力的解決方案。
創建內部委託給常規操作的特殊Rails動作(例如
UsersController#update_oauth
)(例如UsersController#update
)。然後從僞造保護中排除這些(protects_from_forgery :only => [:update]
)。這應該起作用,並且對於一兩個動作可能是可以接受的,但顯然這將是一個非常混亂的解決方案。重寫Rails CSRF保護以忽略OAuth請求。我還沒有嘗試過,但似乎應該可以更改其中一個掛鉤(可能是
verify_authenticity_token
過濾器),以便將OAuth請求視爲成功。
有沒有人碰到過這個?任何建議?或者我可能錯過了一些基本的東西?