Rails请求伪造保护设置

请帮助一个新手在Rails :)我有
protect_from_forgery
调用(默认情况下给出)我的
ApplicationController
类没有属性。 基本上这是代码:
class ApplicationController < ActionController::Base
  helper :all # include all helpers, all the time
  protect_from_forgery
  helper_method :current_user_session, :current_user
  filter_parameter_logging :password, :password_confirmation
我认为它应该做的是:它应该在没有正确
authenticity_token
的情况下阻止任何POST请求。但是当我用jQuery发送post请求时,如下所示,它工作正常(有在数据库中执行的更新语句)!
$.post($(this).attr("href"), { _method: "PUT", data: { test: true } });
我在控制台中看到发送的参数中没有
authenticity_token
,但请求仍被视为有效。这是为什么? UPD 在config / environments / development.rb中找到配置设置
config.action_controller.consider_all_requests_local = true
由于DEV环境和本地请求,这些jQuery帖子请求都可以。     
已邀请:
只要从应用程序本身执行请求
$.post($(this).attr("href"), { _method: "PUT", data: { test: true } });
,您的代码就没有任何问题。如果你有另一个应用程序在其他地方运行,例如在localhost:3001上,你从那里发送了一个帖子,那么它将无法正常工作。事实上,如果您使用的是Firefox> 3.0,它也可以早期实现跨站点xhr。例如,您可以从任何其他站点发送POST(但是这项工作提供了protect_from_forgery已关闭!)。为xhr不需要auth令牌的原因是禁用了交叉站点xhr。因此,在不提供身份验证令牌的情况下使用xhr是安全的。如果你尝试从你的应用程序以外的任何其他地方,我相信它会引发一个异常请求一个身份验证令牌。此外,您应该定义一个crossdomain.xml,以防止从外部源访问。 试着这样做:
curl -X -d url_endpoint_of_your_app
。看看你是否得到200响应代码。如果你这样做,有一些可疑的东西。     
愚蠢的问题,或许:你确定你是ApplicationController的子类吗?你的路线图是什么样的?什么版本的Rails(为了清晰起见)? 您是否验证了来自jQuery的调用实际上是POST而不是GET? (我知道,这似乎很明显)。 Rails只会对非GET请求执行保护。 此外,请求的内容类型是什么。如果它是HTML / Javascript请求,Rails也只会根据文档执行保护。     

要回复问题请先登录注册