Включение 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
,