经过几个星期的使用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在这种情况下做适当的注销?最后,为什么它不能正常工作?
感谢您的帮助。