Включение CSRF на Синатре

Кажется, нет документации о том, как включить защиту CSRF с помощью Rack::Protection в Sinatra для форм. Кто-нибудь когда-либо делал это? Я не могу понять, как сказать Синатре, чтобы включить это.

2 ответа

Решение

В файле Sinatra readme написано, что он включен по умолчанию. Так что нет необходимости включать его.

И если вам нужно что-то вроде Rack::Protection::AuthenticityToken Вы можете просто добавить это промежуточное ПО с помощью своего config.ru или основного файла приложения.

пример:

require 'rack/protection'
use Rack::Protection::AuthenticityToken

Веб-сайт Sinatra бесполезен в этом отношении, но токены CSRF могут быть включены, как описано в комментариях выше Rack::Protection::AuthenticityToken модуль.

Токен хранится в env['rack.session'][:csrf] и будет необходимо вручную добавить в ваши формы под скрытым вводом с именем authenticity_token (или то, что вы настраиваете для использования).

Например:

require 'rack/protection'
use Rack::Protection::AuthenticityToken

get '/' do
  "<form method=post action=/hello>
     <input type=hidden name=authenticity_token value='#{env['rack.session'][:csrf]}'>
     <input type=submit>
   </form>"
end

post '/hello' do
  'hello' # will fail unless a valid authenticity_token parameter is passed
end

Я не уверен в разнице между Rack::Protection::AuthenticityToken а также Rack::Protection::FormToken,

Другие вопросы по тегам