經過幾個星期的使用rails應用程序並完成rails教程後,我想了解一些web應用程序中常見的Web攻擊。未驗證CSRF令牌的真實性時,無法重置用戶會話
我設法在.html文件中使用下面的代碼塊來執行CSRF攻擊類型。
<form action="http://localhost:3000/users/2" method="post">
<input type="hidden" name="_method" value="delete">
<div>
<input type="submit" value="Delete">
</div>
</form>
正在登錄的管理員,我跑對我自己的代碼的攻擊,是基於相同的會話機制Railtutorial和我成功刪除它應該真實性令牌丟失已經停止用戶。
默認行爲應該是會話重置,從而防止用戶在Web應用程序之外被刪除。
我可以在日誌中看到'無法驗證CSRF令牌的真實性',但會話未被重置。
重寫handle_unverified_request方法,應該在默認情況下重置會話,與
def handle_unverified_request
raise(ActionController::InvalidAuthenticityToken)
end
錯誤得到適當提高。
從railstutorial/sample_app_2nd_ed上運行Railstudio git代碼的攻擊剛剛安裝,我遇到了完全相同的問題:會話未被重置,因爲它應該是。這意味着教程應用程序容易受到這種攻擊。
我深入瞭解代碼(http://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-reset_session),但無法弄清楚爲什麼在上下文中Railstutorial它沒有似乎工作。
任何人都可以驗證,如果tutiral確實容易受到CSRF attck的攻擊?如果是的話,解決方案是重寫handle_unverified_request在這種情況下做適當的註銷?最後,爲什麼它不能正常工作?
感謝您的幫助。