2016-03-21 59 views
2

我有一個新的Padrino 0.13.1項目,我在AWS Elastic Beanstalk工作者實例上託管。工作者實例有一個cron作業,每隔5分鐘在我的Padrino應用程序中調用POST。試圖避免「Rack :: Protection :: AuthenticityToken報告的攻擊」消息

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 

的工人實例做了帖子http://localhost:80/myroutine/somevar每5分鐘我已經定義如下的程序。 nginx的access.log文件顯示:

127.0.0.1 - - [21/MAR/2016:04:49:59 0000] 「POST/myroutine/HTTP/1.1」 200 0 「 - 」「aws- sqsd/2.0" , 「 - 」

但在我的AWS production.log文件,我也看到了這個拿出每5分鐘:

WARN - 21 /三月/ 2016 4時49分59秒的攻擊報道by Rack :: Protection :: AuthenticityToken

奇怪的是,例程執行得很好,並做它應該做的事情。我只想停止填寫每5分鐘發生一次的Rack::Protection錯誤日誌文件。

這是因爲某處配置錯誤的csrf設置或錯誤?

+0

在應用程序配置,'設置:protection_from_csrf,TRUE'行看起來矛盾,你想實現什麼。你能檢查這是否是一個錯字? – Kashyap

+0

謝謝@Kashyap。以上是代碼中的內容。我還有其他幾個POST例程,我希望對這些例程提供CSRF保護,因爲它們都是在我的應用程序中調用的。我只是有一個例程從應用程序外部調用,所以它不能像內部調用那樣傳遞csrf標記。 – CyberFerret

回答

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;