16

我有一个网络应用程序,假设http://web.example.comhttp://api.example.com发出 POST 请求。api 服务器正在运行启用了机架保护的最新版本的 Sinatra。我收到此错误“Rack::Protection::HttpOrigin 阻止了攻击”。

我可以做这样的事情:

set :protection, :except => [:http_origin]

但我觉得我只是忽略了实际问题。

我试图这样做:

use Rack::Protection::HttpOrigin, :origin_whitelist => ['http://web.example.com']

但我仍然收到警告。

该请求没有被拒绝,但 Sinatra 清除了我的会话,请参阅这篇文章,我需要 session_id。

任何有关如何为 HttpOrigin 类指定 option_whitelist 的帮助或示例将不胜感激。

4

1 回答 1

21

将您的选项作为哈希传递给set :protection

set :protection, :origin_whitelist => ['http://web.example.com']

然后 Sinatra 将在设置时将它们传递给Rack::Protection它。

我怀疑它失败的原因是use Rack::Protection::HttpOrigin, :origin_whitelist => ['http://web.example.com']你仍然启用了保护,所以你最终得到了两个HttpOrigin. 你可以试试

set :protection, :except => [:http_origin]
use Rack::Protection::HttpOrigin, :origin_whitelist => ['http://web.example.com']

(即有你一起尝试过的两条线),但我认为第一个解决方案更干净。

于 2012-12-29T21:58:50.190 回答