使用rack_csrf
宝石。安装它
gem install rack_csrf
rack_csrf
gem 有一个Sinatra示例。以下是改编自此页面的更简单示例(似乎离线。存档版本):
require "rack/csrf"
configure do
use Rack::Session::Cookie, :secret => "some unique secret string here"
use Rack::Csrf, :raise => true
end
在大多数情况下,使用enable :sessions
而不是use Rack::Session::Cookie ...
也可以工作(参见比尔的评论)。
Rack::Csrf.csrf_token
在您看来,您可以使用andRack::Csrf.csrf_tag
方法获取令牌(或标记) 。如果这看起来很长,您可能希望按照以下方式定义一个助手:
helpers do
def csrf_token
Rack::Csrf.csrf_token(env)
end
def csrf_tag
Rack::Csrf.csrf_tag(env)
end
end
使用辅助方法的小例子:
<form method="post" action="/tweet">
<%= csrf_tag %>
<input type="text" name="message"/>
<input type="submit" value="Submit a tweet!"/>
</form>