2012-12-29 19 views
14

Tôi có ứng dụng web, cho phép nói http://web.example.com gửi yêu cầu POST tới http://api.example.com. Máy chủ api đang chạy phiên bản Sinatra mới nhất với tính năng bảo vệ giá được bật. Tôi nhận được lỗi này 'tấn công ngăn chặn bởi Rack :: Protection :: HttpOrigin'.Làm cách nào để chỉ định Tùy chọn danh sách trắng gốc ở Sinatra bằng Rack/Protection

tôi có thể làm một cái gì đó như thế này:

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

nhưng tôi cảm thấy như tôi chỉ bỏ qua những vấn đề thực tế.

Tôi đã cố gắng để làm điều này:

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

nhưng tôi vẫn nhận được cảnh báo.

Yêu cầu không bị từ chối, nhưng Sinatra xóa phiên của tôi see this post và tôi cần session_id.

Bất kỳ trợ giúp hoặc ví dụ nào về cách chỉ định option_whitelist cho lớp HttpOrigin sẽ được đánh giá cao.

+0

Bạn đã thử 'sử dụng Rack :: Protection,: origin_whitelist => ['http://web.example.com']'? Nhìn vào [nguồn] (https://github.com/rkh/rack-protection/blob/master/lib/rack/protection/http_origin.rb), tôi nghĩ bạn có thể vứt bỏ mảng đó (trừ khi bạn thêm một số đường dẫn) vì một chuỗi duy nhất được bao bọc trong một mảng. – iain

+0

Điều đó dường như không hoạt động. Tôi lấy ví dụ ban đầu từ các bài kiểm tra đặc điểm của thư viện [ở đây] (https://github.com/rkh/rack-protection/blob/master/spec/http_origin_spec.rb) – Emjay

Trả lời

19

Vượt qua lựa chọn của bạn như một băm để set :protection:

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

Sinatra sau đó sẽ vượt qua chúng thông qua để Rack::Protection khi cài đặt nó lên.

Tôi nghi ngờ lý do không thành công khi bạn có use Rack::Protection::HttpOrigin, :origin_whitelist => ['http://web.example.com'] là bạn vẫn có chế độ bảo vệ được bật, để bạn kết thúc với hai trường hợpHttpOrigin. Bạn có thể thử

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

(ví dụ: đã cả dòng bạn đã thử cùng), nhưng tôi nghĩ rằng giải pháp đầu tiên là sạch hơn.

+0

Tuyệt vời, cảm ơn bạn, đó là những gì tôi đang tìm kiếm cho! – Emjay

Các vấn đề liên quan