在我的一个控制器中,我编写以下内容以保护CSRF中的某些页面.
protect_from_forgery :only => [:foo, :bar]
当我加载URL的对应于foo
和bar
,和我查看HTML,我没有看到任何隐藏的输入域或包含任何安全令牌的meta标签,描述在这里.
但是,在测试期间,我确实发现这CSRF
对这些页面无效,尽管它对同一应用程序中未受保护的其他页面有效.
那么在哪里Rails 4
存储用于验证请求来自原始页面的安全令牌?
请注意,我已经通过阅读Ruby on Rails的安全指南,并从部分上protect_from_forgery
,它说
这将自动包含所有表单中的安全令牌和Rails生成的Ajax请求.如果安全令牌与预期的不匹配,则会重置会话.
问题是,启用CSRF保护的页面上的表单中似乎缺少此安全令牌,即使CSRF确实对它们无效.
请注意,此代码来自一个类项目,其中一个目标是执行clickjacking攻击以绕过CSRF项目.我在这里提出的问题与作业的目的是正交的.
我只是好奇Rails如何做CSRF.
在rails server
直接做之后,我找不到安全令牌的相关URL是http://localhost:3000/protected_transfer
.