似乎没有关于如何在Sinatra中使用Rack :: Protection为表单启用CSRF保护的文档。有人这样做过吗?我似乎无法弄清楚如何告诉Sinatra启用此功能。
答案 0 :(得分:1)
Sinatra readme表示默认启用它。所以没有必要启用它。
如果你需要像Rack::Protection::AuthenticityToken
这样的东西,你可以在config.ru或主应用程序文件中添加这个中间件。
示例:
require 'rack/protection'
use Rack::Protection::AuthenticityToken
答案 1 :(得分:0)
Sinatra网站在这方面无济于事,但是可以如Rack::Protection::AuthenticityToken
模块上方的comments中所述启用CSRF令牌。
令牌存储在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
之间的区别。