Как указать параметры белого списка в Sinatra с помощью Rack/Protection
У меня есть веб-приложение, скажем http://web.example.com, что делает запрос POST http://api.example.com, На сервере api установлена последняя версия Sinatra с включенной поддержкой стойки. Я получаю эту ошибку "атака, предотвращенная Rack:: Protection:: HttpOrigin".
Я могу сделать что-то вроде этого:
set :protection, :except => [:http_origin]
но я чувствую, что просто игнорирую фактическую проблему.
Я попытался сделать это:
use Rack::Protection::HttpOrigin, :origin_whitelist => ['http://web.example.com']
но я все еще получаю предупреждение.
Запрос не отклоняется, но Sinatra очищает мою сессию см. этот пост, и мне нужен session_id.
Приветствуется любая помощь или примеры того, как указать параметр_whitelist для класса HttpOrigin.
Ответы
Ответ 1
Передайте свои параметры как хэш set :protection
:
set :protection, :origin_whitelist => ['http://web.example.com']
Затем 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']
(т.е. имеют обе линии, которые вы пытались вместе), но я думаю, что первое решение является более чистым.