Rails似乎忽略了AJAX请求的真实性令牌。例如,我故意更改了AJAX调用以使用无效的令牌对其进行测试,并且请求似乎正常进行。
该应用程序具有使用会话cookie存储的默认配置,并在ApplicationController中具有了protect_from_forgery调用。
有什么想法我可能会错过的吗?
编辑>>我也在博客文章中发布了此答案:http:
//zadasnotes.blogspot.com/2010/11/rails-3-forgery-csrf-protection-
for.html
[
archive.org ]
编辑2 >>在Rails 3.0.4中对此进行了更改。请参阅以下后续帖子: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_forgery* 在 verify_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
还有 经验证的请求? 显示在这里:
# 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被列入白名单,并且不在protect_from_forgery列表中。因此看来这是设计使然。
在进一步研究xmlHttpRequests之后,似乎在跨域运行它们方面存在限制,这使得不必在xhr上应用csrf检查。
我的rails应用程序订阅了一个外部系统POST通知(名为Orion context broker)。我管理发送json数据和处理响应(Ruby->Orion)。
我在开发一个新的Rails4应用程序(在Ruby 2.0.0-P0上)时遇到了一些真实性令牌问题。 在编写响应json的控制器时(使用类方法),我使用了操作,当我试图使用创建记录时,我开始获取异常。 我确保设置了,并使用设置了数据,但仍然没有成功。 编辑:我只是尝试在一个新的Rails4应用程序中使用脚手架创建一个新记录,而没有做任何更改,我遇到了同样的问题,所以我想这不是我做的事情。
我正在为一种语言编写一个编译器,作为大学使用ANTLR4的项目。我使用Java编写了这个编译器,并采用了Visitor模式,当我到达测试阶段时,我注意到ANTLR忽略了我的部分代码,并生成了它不应该生成的错误。 语法: 以下是我的主要观点: 当我运行Main时,它显示: 第1行:0不匹配的输入'import'应为{(',INT,FLOAT,STRING,IDF} 我的语法有什么地方错了吗?如果没有
客户端通过使用按附录B“application/x-www-form-urlencoded”格式在HTTP请求实体正文中发送下列UTF-8字符编码的参数向令牌端点发起请求: grant_type 必需的。值必须设置为“client_credentials”。 scope 可选的。如3.3节所述的访问请求的范围。 客户端必须如3.2.1所述与授权服务器进行身份验证。 例如,客户端使用传输层安全发起如
客户端通过使用按附录B“application/x-www-form-urlencoded”格式在HTTP请求实体正文中发送下列UTF-8字符编码的参数向令牌端点发起请求: grant_type 必需的。值必须设置为“password”。 username 必需的。资源所有者的用户名。 password 必需的。资源所有者的密码。 scope 可选的。如3.3节所述的访问请求的范围。 如果客户端类
客户端通过使用按附录B“application/x-www-form-urlencoded”格式在HTTP请求实体正文中发送下列UTF-8字符编码的参数向令牌端点发起请求: grant_type 必需的。值必须被设置为“authorization_code”。 code 从授权服务器收到的授权码。 redirect_uri 必需的,若“redirect_uri”参数如4.1.1节所述包含在授权请求