1

ここを参照してください: http://guides.rubyonrails.org/security.html


[Rails CSRF 保護] は、現在のセッションとサーバー側のシークレットから計算されたセキュリティ トークンを、Rails によって生成されたすべてのフォームと Ajax リクエストに自動的に含めます。CookieStorage をセッション ストレージとして使用する場合は、シークレットは必要ありません。セキュリティ トークンが予期したものと一致しない場合、セッションはリセットされます。


セッション全体をCookieに保存する場合、サーバー側の秘密が必要ない理由を誰かが説明してくれることを本当に望んでいます。

私が尋ねる理由は、Rails がすべてのフォームに CSRF トークンを挿入しない100% クライアント側アプリケーション(ember.js)で CSRF トークンを生成する方法があるかどうかを調べようとしているからです。JavaScript を使用して Cookie に書き込むことはもちろん、さまざまな値をハッシュすることもできます。

JavaScript を使用してクライアント側で Cookie を生成し、サーバー側のシークレットを使用せず、サーバー上で検証できる方法がある場合は、お知らせください。

4

2 に答える 2

0

これをググってみましたか?

jQuery/ember.js/Rails CSRF に関する情報はたくさんあります。jQuery には、$.ajaxPrefilterMETA タグから要求ヘッダーに CSRF トークンを追加するために使用できる があります(単一ページ アプリのページに META タグが存在することは問題にならないはずです)

この記事では、このメソッドを使用する 1 つの実装を提供します (例は Coffeescript にあります)。

$ ->
  token = $('meta[name="csrf-token"]').attr('content')
  $.ajaxPrefilter (options, originalOptions, xhr) ->
    xhr.setRequestHeader('X-CSRF-Token', token)

を拡張する別の実装DS.RESTAdapterを次に示します。

「通常の」アプリケーションで Rails が行っていることはすべて、CSRF トークンを非表示の入力フィールドとしてフォームに追加することです。この方法で来る場合でも、HTTP リクエスト ヘッダーとして来る場合でも、Rails はまったく同じように受け取ります。

于 2013-05-29T21:55:42.927 に答える
0

Rails で CookieSessionStore を使用すると、Cookie に署名するために使用されるシークレット トークンが存在する可能性があると思います。Rails は代わりにそのシークレット トークンを使用して検証する場合があります

于 2014-03-20T19:25:26.650 に答える