在我的一个控制器中,我编写了以下内容来保护CSRF的某些页面。Rails 4在哪里存储用于CSRF保护的身份验证令牌?
protect_from_forgery :only => [:foo, :bar]
当我加载URL的对应于foo
和bar
,我查看HTML,我没有看到任何隐藏的输入域或包含任何安全令牌的meta标签,描述here。
但是,在测试过程中,我确实注意到CSRF
对这些页面无效,虽然它对于同一应用程序中未受保护的其他页面有效。
那么Rails 4
在哪里存储用于验证请求来自原始页面的安全令牌?
请注意,我已经通过Ruby On Rails Security Guide读,并且从部分上protect_from_forgery
,它说
这会自动包含在由导轨产生的各种形式和Ajax请求 安全令牌。如果安全令牌与预期的 不匹配,会话将被重置。
的问题是,这安全令牌似乎是从上启用了CSRF保护页面的形式丢失,即使CSRF的确不是对他们有效。
注意,这个代码是从class project,其中的目标之一是进行点击劫持攻击绕过CSRF项目。我在这里问的问题是正交于作业的目的。
我只是很好奇Rails如何做CSRF。
在直接做了rails server
之后,我找不到安全令牌的相关URL是http://localhost:3000/protected_transfer
。
感谢您实际查看项目代码。令人惊讶的是,它*确实接受了合法的请求,现在我正在摸索着理解为什么。 – merlin2011
它发布到'post_transfer'(表单动作是硬编码的)而不是'protected_post_transfer',所以它实际上应该容易受到CSRF的攻击。你确定它不是? –
非常好的赶上!它看起来像教练搞砸了。我会将它指向'protected_post_transfer'并查看它是否仍然接受任何请求。 – merlin2011