Ruby on rails Rails 3保护\u免受\u伪造,但工作不正常?

Ruby on rails Rails 3保护\u免受\u伪造,但工作不正常?,ruby-on-rails,csrf,protect-from-forgery,Ruby On Rails,Csrf,Protect From Forgery,我使用的是Rails 3.0.2,它在application\u controller.rb中默认具有保护\u免受伪造 我想触发一个无效身份验证登录 为此,我已将此javascript添加到我的页面: $('input[name=authenticity_token]').val('aaa') 使用Firebug检查DOM时,我看到真实性\u标记隐藏字段已正确更新 如果我提交表单并从服务器检查日志,我会看到相关参数正确设置为“aaa”。当请求被正确处理时,我希望得到一个InvalidAuthe

我使用的是Rails 3.0.2,它在application\u controller.rb中默认具有
保护\u免受伪造

我想触发一个
无效身份验证登录

为此,我已将此javascript添加到我的页面:

$('input[name=authenticity_token]').val('aaa')
使用Firebug检查DOM时,我看到
真实性\u标记
隐藏字段已正确更新

如果我提交表单并从服务器检查日志,我会看到相关参数正确设置为“aaa”。当请求被正确处理时,我希望得到一个
InvalidAuthenticityToken


这是怎么可能的?

真实性令牌/csrf行为的文档已过时。在这些情况下,
InvalidAuthenticityToken
异常不再抛出,而只是重置会话。如果您希望以不同的方式(或旧的方式)处理此问题,您可以在控制器上的
handle\u unverified\u request
中定义自己的行为。

我还认为您必须重置表单所在html页面元标记中的真实性令牌(我假设您在其中有)。Rails检查表单中的令牌(您在上面的javascript中更改的)或html页面的meta标记中的令牌是否与Rails的预期真实性令牌匹配,以及它们是否匹配,然后将不会触发您的InvalidAuthenticationToken…

您应该接受答案,因为它解决了您的pb。重置会话不足以防止CSRF。在rails 4中,默认的对策是引发异常,这更安全。