13

Sinatra フレームワークを使用して Ruby で簡単なアプリを構築しています。これは主に「取得」ベースです。ほとんどのリクエストは、データの一覧表示に関するものです。ただし、アプリにはユーザー入力を収集する主要な画面がいくつかあります。アプリができる限り安全であることを確認したいのですが、現在、Rails フォームで取得する種類の認証トークンを実装する方法を見つけようとしていますか?

私がしなければならない場所:まあ、csrfのトークンが必要なのはわかっていますが、自分でトークンを生成する必要があるのか​​ 、それともシナトラがそれをやってくれるのかわかりません-ドキュメントを調べたところ、彼らはそれを言っていますSinatra は Rack Protection を使用していますが、サンプル コードが見つからず、それを実行する方法がわかりません。

4

2 に答える 2

28

rack_csrf宝石を使用します。でインストールします

gem install rack_csrf

rack_csrf宝石にはシナトラの例があります。以下は、このページを基にした簡単な例です(オフラインのようです。アーカイブ バージョン)。

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 ...ことも、ほとんどの場合に機能します (Bill のコメントを参照)。

Rack::Csrf.csrf_tokenビューでは、およびRack::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>
于 2012-07-12T11:51:36.390 に答える