有时发现请求未经验证的时间和方式。 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'