如何使用机架/保护在Sinatra中指定原始白名单选项

时间:2012-12-29 16:48:25

标签: sinatra rack cors

我有一个网络应用,让我们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会清除我的会话see this post,我需要session_id。

非常感谢有关如何为HttpOrigin类指定option_whitelist的任何帮助或示例。

1 个答案:

答案 0 :(得分:21)

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

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

Sinatra会在设置时将它们传递给Rack::Protection

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

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

(即你已经尝试了一起),但我认为第一个解决方案更清晰。