gpt4 book ai didi

jquery - Rails 3 AJAX 请求真实性 token 被忽略

转载 作者:行者123 更新时间:2023-12-03 22:49:06 24 4
gpt4 key购买 nike

Rails 似乎忽略了 AJAX 请求的真实性 token 。例如,我故意更改了 AJAX 调用,以使用无效 token 进行测试,并且请求似乎正常通过。

应用程序具有使用 session cookie 存储的默认配置,并在 ApplicationController 中调用了 protected_from_forgery。

你知道我还可能错过什么吗?

最佳答案

EDIT >> I posted this answer in a blog post as well: http://zadasnotes.blogspot.com/2010/11/rails-3-forgery-csrf-protection-for.html [archive.org]

EDIT 2 >> This was changed in Rails 3.0.4. See follow up post here: http://zadasnotes.blogspot.com/2011/02/rails-forgery-csrf-protection-for-ajax.html [archive.org]

研究了一段时间后,我决定深入研究一下 Rails 代码文档来找出答案。

从这里开始:http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection.html#method-i-form_authenticity_token

protect_from_forgeryverify_authenticity_token 上添加 before_filter,如下所示:

# File actionpack/lib/action_controller/metal/request_forgery_protection.rb, line 95
95: def verify_authenticity_token
96: verified_request? || raise(ActionController::InvalidAuthenticityToken)
97: end

这里显示了verified_request?:

# File actionpack/lib/action_controller/metal/request_forgery_protection.rb, line   
104: def verified_request?
105: !protect_against_forgery? || request.forgery_whitelisted? ||
106: form_authenticity_token == params[request_forgery_protection_token]
107: end

最后request.forgery_whitelisted?:

   # File actionpack/lib/action_dispatch/http/request.rb, line 126
126: def forgery_whitelisted?
127: get? || xhr? || content_mime_type.nil? || !content_mime_type.verify_request?
128: end

注意xhr?。 xmlHttpRequest 已列入白名单,并且不在 protected_from_forgery 列表中。所以看来这是设计使然。

在对 xmlHttpRequests 进行进一步研究后,发现跨域运行它们存在限制,这使得没有必要对 xhr 应用 csrf 检查。

关于jquery - Rails 3 AJAX 请求真实性 token 被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4111722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com