有时发现请求未经验证的时间和方式。 ruby 在 rails 3.2
When and how request sometimes found to be unverified. ruby on rails 3.2
# This is the method that defines the application behavior when a request is found to be unverified.
# By default, Rails resets the session when it finds an unverified request.
def handle_unverified_request
reset_session
end
我在Rails 4 Authenticity Token
看到了这个解释
现在我的问题是每个请求何时以及如何有时变得未经验证?事情进展如何?以及什么时候。
谢谢,我试过搜索它,但我看到的解释非常技术性,因此我可以简单地理解
Rails 添加 CSRF 真实性令牌以提交表单。
如果您的浏览器中有一个 Rails-generated 表单并检查它,您会看到类似这样的内容:
<input type="hidden" name="authenticity_token" value="/LV6706J3W++oCASgg8+wuySgIksE9BNjamMbMW8Zv+G039yyxbpcRpUlUzuVbVvodKtDnUbknwo+jsBzsoO8g==">
Rails 在提交表单时检查此隐藏标签,以确保它与 Rails 首先生成的表单相同。这有助于防止 CSRF attacks
如果此字段的值与 Rails 预期的值不匹配,它将转到您提到的 handle_unverified_request
方法。
不仅是表单,Rails 还可以 add tokens to the session 确保它可以将请求与活动会话相匹配。
无论来源如何,如果 Rails 收到 mis-match,它希望将其视为安全威胁。
本质上,Rails 是在问您“当我认为收到的请求未经验证且可能受到攻击时,我该怎么办?”
在这种情况下,Rails 将 reset_session
注销 current_user
。
Rails 允许您在可能需要做一些奇怪的事情的情况下关闭或限制 CSRF 保护,但在我熟悉的任何情况下都不建议这样做。
您可以通过更改 protect_from_forgery
上的选项来完成此操作,如您链接的 SO post 中所述。
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
然后我注销了控制器
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'
# This is the method that defines the application behavior when a request is found to be unverified.
# By default, Rails resets the session when it finds an unverified request.
def handle_unverified_request
reset_session
end
我在Rails 4 Authenticity Token
看到了这个解释现在我的问题是每个请求何时以及如何有时变得未经验证?事情进展如何?以及什么时候。
谢谢,我试过搜索它,但我看到的解释非常技术性,因此我可以简单地理解
Rails 添加 CSRF 真实性令牌以提交表单。
如果您的浏览器中有一个 Rails-generated 表单并检查它,您会看到类似这样的内容:
<input type="hidden" name="authenticity_token" value="/LV6706J3W++oCASgg8+wuySgIksE9BNjamMbMW8Zv+G039yyxbpcRpUlUzuVbVvodKtDnUbknwo+jsBzsoO8g==">
Rails 在提交表单时检查此隐藏标签,以确保它与 Rails 首先生成的表单相同。这有助于防止 CSRF attacks
如果此字段的值与 Rails 预期的值不匹配,它将转到您提到的 handle_unverified_request
方法。
不仅是表单,Rails 还可以 add tokens to the session 确保它可以将请求与活动会话相匹配。
无论来源如何,如果 Rails 收到 mis-match,它希望将其视为安全威胁。
本质上,Rails 是在问您“当我认为收到的请求未经验证且可能受到攻击时,我该怎么办?”
在这种情况下,Rails 将 reset_session
注销 current_user
。
Rails 允许您在可能需要做一些奇怪的事情的情况下关闭或限制 CSRF 保护,但在我熟悉的任何情况下都不建议这样做。
您可以通过更改 protect_from_forgery
上的选项来完成此操作,如您链接的 SO post 中所述。
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
然后我注销了控制器
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'