【问题标题】:Trying to avoid "attack reported by Rack::Protection::AuthenticityToken" message试图避免“Rack::Protection::AuthenticityToken 报告的攻击”消息
【发布时间】:2016-07-07 15:05:27
【问题描述】:

我有一个新的 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

worker 实例每 5 分钟向 http://localhost:80/myroutine/somevar 发送一个帖子。 nginxaccess.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 分钟出现一次:

警告 - 2016 年 3 月 21 日 04:49:59 攻击由 Rack::Protection::AuthenticityToken 报告

奇怪的是,例程执行得很好,并且做了它应该做的事情。我只想阻止我的日志文件每 5 分钟填充一次 Rack::Protection 错误。

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

【问题讨论】:

  • 在应用程序配置中,set :protection_from_csrf, true 行看起来与您想要实现的目标相矛盾。你能检查一下是不是笔误吗?
  • 谢谢@Kashyap。以上是代码中的内容。我还有其他几个 POST 例程,我希望为这些例程提供 CSRF 保护,因为它们都是从我的应用程序中调用的。我只有一个从我的应用程序外部调用的例程,因此它不能像内部调用那样传递 csrf 令牌。

标签: ruby sinatra padrino


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多