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

kel*_*smj 16 rack sinatra cors

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

我可以这样做:

set :protection, :except => [:http_origin]
Run Code Online (Sandbox Code Playgroud)

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

我试过这样做:

use Rack::Protection::HttpOrigin, :origin_whitelist => ['http://web.example.com']
Run Code Online (Sandbox Code Playgroud)

但我仍然得到警告.

该请求不会被拒绝,但Sinatra清除我的会话看到这篇文章,我需要session_id.

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

mat*_*att 21

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

set :protection, :origin_whitelist => ['http://web.example.com']
Run Code Online (Sandbox Code Playgroud)

然后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']
Run Code Online (Sandbox Code Playgroud)

(即同时拥有线你试过在一起),但我认为第一种方法是清洁剂.