【发布时间】: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 令牌。