我间歇地在Rails日志中收到CSRF警告。我想我已经解决了这个问题,但是想从安全的角度来看解决方案是否合理。
这是一个带有Devise应用程序和一些Angular JS的Rails 4应用程序。有时在某个页面上,用户会话可以超时,然后我们发出一个AJAX请求(虽然我也可以在正常的html请求中看到它,它只是在JS中更经常地主要自我)我们在日志中得到一个401并且可以从中处理点。问题出现在401之前,我们收到以下消息:
警告:无法验证CSRF令牌真实性
这是嘈杂的,所以我不知道是否有真正的攻击正在进行。他们已经退出了,我相信他们的令牌不再有效。
我相信这是因为在Application Controller中protect_from_forgery发生在我的设计authenticate_user之前!过滤。所以:
class ApplicationController < ActionController::Base
protect_from_forgery
etc....
end
发生之前
class MyController < ApplicationController
before_filter :authenticate_user!
def new
end
end
如果我将上述内容更改为prepend_before_action :authenticate_user!
,CSRF消息就会消失。我的问题是(安全)有理由不这样做吗?我没有看到其他人这样做,所以假设他们也必须得到这个消息?对我来说,Devise是我们过滤器链中发生的第一件事之一,但并不认为这是常见做法。
提前致谢:)