在Sinatra上启用CSRF

时间:2014-09-01 06:34:32

标签: sinatra csrf-protection

似乎没有关于如何在Sinatra中使用Rack :: Protection为表单启用CSRF保护的文档。有人这样做过吗?我似乎无法弄清楚如何告诉Sinatra启用此功能。

2 个答案:

答案 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::AuthenticityTokenRack::Protection::FormToken之间的区别。