# 這是定義請求被發現為未驗證的時候的應用行為的方法。
# 默認情況下,Rails在發現一個未經驗證的請求時,會重置會話。
def handle_unverified_request
reset_session
end
看到了這個解釋。
現在我的問題是,有時每個請求都會變成未驗證的,這是怎么發生的?
謝謝你,我試著搜索了一下,但我看到的解釋是如此深奧的技術,因此我可以用一種簡單的方式來理解
。uj5u.com熱心網友回復:
Rails為表單提交添加了一個CSRF真實性令牌
。如果你在瀏覽器中擁有一個Rails生成的表單,并對其進行檢查,你會看到類似這樣的東西:
< input type="hidden"/span> name="authenticity_token"/span> value="/LV6706J3W oCASgg8 wuySgIksE9BNjamMbMW8Zv G039yyxbpcRpUlUzuVbVvodKtDnUbknwo jsBzsoO8g=="/span>>。
Rails在表單提交時檢查這個隱藏標簽,以確保它是Rails首先生成的同一個表單。這有助于防止CSRF攻擊
如果這個欄位的值與 Rails 所期望的不一致,它就會轉到您提到的 handle_unverified_request 方法。
而且不僅僅是表單,Rails 還可以向會話添加令牌以確保它能夠將請求與活動會話相匹配。
無論來源如何,如果 Rails 獲得錯誤的匹配,它希望將其作為一種安全威脅來處理。
實質上,Rails 正在詢問您 "當我認為我收到的請求未經驗證且可能是攻擊時,我應該怎么做?"
在這種情況下,Rails 正在詢問您 "當我認為我收到的請求未經驗證且可能是攻擊時,我應該怎么做?
在這種情況下,Rails 將reset_session,它將注銷current_user。
Rails 允許您在可能需要做奇怪事情的情況下關閉或限制 CSRF 保護,但在我所熟悉的任何情況下,這都是不可取的。
你可以通過改變protect_from_forgery上的選項來做到這一點,正如你鏈接的SO帖子中提到的那樣。
uj5u.com熱心網友回復:
def handle_unverified_request
Reset_connection
# validate only for html submit and not for ajax
if request.post? && !request.xhr? & request.content_type != 'multipart/form-data'
redirect_to controller: 'logout', action: 'index', is_invalid_token: true.
end
return
end end
然后我有注銷控制器
if !params[:is_invalid_token].nil?
flash[:notice] = "You dont have access with this." ?
flash[:notice_header] = 'Forbidden Access'。
end
redirect_to :controller => 'login', :action => 'index'
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/313855.html
標籤:
