试图避免“Rack :: Protection :: AuthenticityToken报告的攻击”消息

时间:2016-03-21 07:37:58

标签: ruby sinatra padrino

我有一个新的Padrino 0.13.1项目,我正在AWS Elastic Beanstalk工作者实例上托管。 worker实例有一个cron作业,在我的Padrino应用程序中每5分钟调用一次POST。我已经按如下方式定义了例程:

post :myroutine, :with => :myparams, :csrf_protection => false do
  # ... do some stuff
  status 200
end

我还配置了/config/apps.rb如下:

Padrino.configure_apps do
  set :session_secret, '...'
  set :protection, :except => :path_traversal
  set :protection_from_csrf, true
  set :allow_disabled_csrf, true
end

工作者实例每5分钟向http://localhost:80/myroutine/somevar发帖一次。 nginx access.log文件显示:

  

127.0.0.1 - - [21 / Mar / 2016:04:49:59 +0000]“POST / myroutine / 01234 HTTP / 1.1”200 0“ - ”“aws-sqsd / 2.0”“ - ”

但是在我的AWS production.log文件中,我也看到每5分钟就出现一次:

  

WARN - 21 / Mar / 2016 04:49:59 Rack :: Protection :: AuthenticityToken报道攻击

奇怪的是,例程执行正常,并完成它应该做的事情。我只想阻止我的日志文件每隔5分钟填满Rack::Protection错误。

这是因为某个地方的csrf设置配置错误还是错误?

1 个答案:

答案 0 :(得分:1)

它是由nginx反向代理设置引起的。

可能丢失http相关信息,结果会话信息丢失。

https://github.com/znc/znc/issues/946 我只是添加以下行,它的工作原理:

proxy_set_header        X-Real_IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header        X-NginX-Proxy   true;
proxy_set_header        Host            $http_host;
proxy_set_header        Upgrade         $http_upgrade;
proxy_pass_header       Set-Cookie;