在我的一個控制器中,我編寫了以下內容來保護CSRF的某些頁面。Rails 4在哪裏存儲用於CSRF保護的身份驗證令牌?
protect_from_forgery :only => [:foo, :bar]
當我加載URL的對應於foo
和bar
,我查看HTML,我沒有看到任何隱藏的輸入域或包含任何安全令牌的meta標籤,描述here。
但是,在測試過程中,我確實注意到CSRF
對這些頁面無效,雖然它對於同一應用程序中未受保護的其他頁面有效。
那麼Rails 4
在哪裏存儲用於驗證請求來自原始頁面的安全令牌?
請注意,我已經通過Ruby On Rails Security Guide讀,並且從部分上protect_from_forgery
,它說
這會自動包含在由導軌產生的各種形式和Ajax請求 安全令牌。如果安全令牌與預期的 不匹配,會話將被重置。
的問題是,這安全令牌似乎是從上啓用了CSRF保護頁面的形式丟失,即使CSRF的確不是對他們有效。
注意,這個代碼是從class project,其中的目標之一是進行點擊劫持攻擊繞過CSRF項目。我在這裏問的問題是正交於作業的目的。
我只是很好奇Rails如何做CSRF。
在直接做了rails server
之後,我找不到安全令牌的相關URL是http://localhost:3000/protected_transfer
。
感謝您實際查看項目代碼。令人驚訝的是,它*確實接受了合法的請求,現在我正在摸索着理解爲什麼。 – merlin2011
它發佈到'post_transfer'(表單動作是硬編碼的)而不是'protected_post_transfer',所以它實際上應該容易受到CSRF的攻擊。你確定它不是? –
非常好的趕上!它看起來像教練搞砸了。我會將它指向'protected_post_transfer'並查看它是否仍然接受任何請求。 – merlin2011