2012-12-29 12 views
14

Mam aplikację internetową, powiedzmy, http://web.example.com wysyłając żądanie POST pod numer http://api.example.com. Na serwerze api działa najnowsza wersja Sinatry z włączoną ochroną szaf. Otrzymuję tego ataku błędu, którego zapobiegał Rack :: Protection :: HttpOrigin '.Jak określić opcje białej listy początków w aplikacji Sinatra za pomocą Rack/Protection

mogę zrobić coś takiego:

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

ale czuję, że jestem po prostu ignorując rzeczywisty problem.

Próbowałem to zrobić:

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

ale nadal dostać ostrzeżenie.

Żądanie nie zostanie odrzucone, ale Sinatra wyczyści moją sesję see this post i potrzebuję session_id.

Każda pomoc lub przykłady dotyczące określania opcji option_whitelist dla klasy HttpOrigin będą bardzo mile widziane.

+0

Czy wypróbowałeś 'use Rack :: Protection,: origin_whitelist => ['http://web.example.com']'? Patrząc na [źródło] (https://github.com/rkh/rack-protection/blob/master/lib/rack/protection/http_origin.rb), myślę, że możesz również pozbyć się tablicy (chyba, że ​​jesteś dodawanie kilku ścieżek), ponieważ pojedynczy ciąg jest w każdym razie zawijany w tablicę. – iain

+0

To też nie działa. Mam swój oryginalny przykład z testów specyficznych bibliotek [tutaj] (https://github.com/rkh/rack-protection/blob/master/spec/http_origin_spec.rb) – Emjay

Odpowiedz

19

Przełóż swoje możliwości jako hash do set :protection:

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

Sinatra następnie przekazać je aż do Rack::Protection po jej utworzeniu.

podejrzewam przyczynę się niepowodzeniem, gdy masz use Rack::Protection::HttpOrigin, :origin_whitelist => ['http://web.example.com'] jest to, że nadal masz włączone zabezpieczenia, tak aby skończyć z dwa wystąpień HttpOrigin. Można spróbować

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

(czyli oba przewody próbowałem razem), ale myślę, że pierwsze rozwiązanie jest czystsze.

+0

Wspaniale, dziękuję, właśnie tego szukałem dla! – Emjay