2012-12-29 2 views
14

私はWebアプリケーションを持っています。http://web.example.comhttp://api.example.comというPOSTリクエストをします。 apiサーバーはSinatraの最新バージョンを実行しており、ラック保護が有効になっています。私はこのエラーを受け取りました.Rack :: Protection :: HttpOriginによって攻撃が阻止されました。SinatraでRack/Protectionを使用してOrigin Whitelistオプションを指定するにはどうすればいいですか

は、私はこのような何か行うことができます。

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

を私は、私はちょうど実際の問題を無視していますように感じます。

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

を私はまだ警告を受ける:

私はこれを行うことを試みました。

リクエストは拒否されませんが、Sinatraはセッション​​をクリアし、session_idが必要です。

HttpOriginクラスのoption_whitelistを指定する方法に関するヘルプや例は、非常に高く評価されます。

+0

あなたは 'Rack :: Protection、:origin_whitelist => ['http://web.example.com']'を使ってみましたか? [ソース](https://github.com/rkh/rack-protection/blob/master/lib/rack/protection/http_origin.rb)を見ると、あなたは配列を破棄することができますとにかく1つの文字列が配列にラップされるので、いくつかのパスを追加する)。 – iain

+0

それはどちらもうまくいかないようです。私はライブラリー仕様のテストから私の元の例を得ました[ここ](https://github.com/rkh/rack-protection/blob/master/spec/http_origin_spec.rb) – Emjay

答えて

19

set :protectionにハッシュとして、あなたのオプションを渡します。これを設定するとき

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

シナトラは、Rack::Protectionにそれらを通過します。

私はあなたがHttpOriginののインスタンスで終わるように、あなたはuse Rack::Protection::HttpOrigin, :origin_whitelist => ['http://web.example.com']を持っている場合、それは失敗している理由は、あなたがまだ保護が有効になっているということである疑いがあります。あなたは

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

を(すなわち、あなたが一緒にを試してみたラインの両方を持っている)試みることができるが、私は最初のソリューションはきれいだと思います。

+0

素晴らしい、ありがとう、それは私が探していたものでしたために! – Emjay

関連する問題