5

Rails3のデフォルトでRailsがCSRF保護を提供していることは知っています。しかし、私の Web アプリケーションはシングル ページ アプリケーションであり、すべての通信は ajax に依存しています。

では、各 ajax 呼び出しの前にサーバーから CSRF トークンを取得するにはどうすればよいですか? または私にできることは、CSRF保護を外すことですよね?

注: ホームページを含む Web ページを生成するために Rails ビューを使用しないため、.html または .erb に "<%= csrf_meta_tag %> " を配置するソリューションは無効です。1 つのページ内で JavaScript フレームワークを使用します。 .

私の環境:rails3.2.3、devise2.0.4、dojo1.7.2

4

1 に答える 1

4

Rails-backboneプロジェクトをご覧になることをお勧めします。特にbackbone_rails_sync.jsファイル。

これは、この gem が CSRF トークン データをサーバーに送信する ajax リクエストと一緒に送信する方法を示しています。

また、デフォルトの jQuery ajax() メソッドをオーバーライドして常に CSRF トークンを送信する方法の例を示す、Django プロジェクトによるドキュメントもいくつかあります。

コメントに基づいて更新:

したがって、REST API のみを使用し、ビューやフォームをまったく使用しない場合に CSRF を実装する方法を尋ねているところです。

答えは: CSRF 保護を含めないでください。

クロスサイト リクエスト フォージェリとは、別の (悪意のある) Web サイトがリクエストを再現または模倣し、有効なユーザーになりすましてサーバーに無効なデータを送信する方法です。

これは、ユーザーが認証する必要があり、認証状態がキャッシュに保存されている場合にのみ問題になります (ページ ビュー間で保持するため)。悪意のある Web サイトがこのキャッシュをハイジャックすると、このユーザーになりすましてデータを送信できますが、ユーザーとサーバーはこれに気付かない可能性があります。これは、CSRF 保護が採用されていることです。この特定の要求に対してのみ有効で、他の要求ごとに固有の特別な文字列をフォームに挿入します。そのため、セッションがハイジャックされた場合でも、CSRF 保護によって、サーバ。

ただし、あなたの場合、HTTP API 呼び出しを使用しているため、Authorization header. この方法では、資格情報がキャッシュされることはなく、乗っ取られることもないため、CSRF 保護は必要ありません。

ただし、RESTful API が安全であることを確認する方法は他にもあります。

  • 常に暗号化された形式 (https/ssl) でネットワーク経由でデータを送信します。
  • oAuth(2)、API トークン、基本 HTTP 認証などの優れた認証方法を使用します(最後の 2 つは安全性が低くなりますが、小規模なアプリケーションには十分安全です)。
  • それらに対処する前に、アプリケーションに入力されるすべての値を常に確認してください
于 2012-06-25T16:17:22.617 に答える