2013-01-01 15 views
27

私はRailsでAngularJSを使用しています。私は一括してユーザーを更新する次の要求を持っています。Angular JS POST要求のCSRFトークンを確認する

$http{ 
    method: 'POST', 
    url: $scope.update_url, 
    params: {selected_ids: userIds} 
} 

これは、URL(http://support.microsoft.com/kb/208427)

の長さではなく、 'POST' リクエストの制限のために 'GET' 要求することはできませんヘッダーにCSRF認証トークンが必要です。

はどのようにしてPOSTリクエストヘッダにCSRFトークンを設定することができますか?

答えて

65

httpヘッダーは$httpサービスの説明に従って設定できます。

あなたは世界的にそれを設定することができます

$httpProvider.defaults.headers.post['My-Header']='value' (or) 
$http.defaults.headers.post['My-Header']='value'; 

または単一の要求のための

クロスサイトリクエストフォージェリ(:ここ

$http({ 
    headers: { 
     'My-Header': 'value' 
    } 
}); 

Angularからの重要な引用でありますXSRF)保護XSRFは の技術であり、不正なサイトがユーザーのprivaを取得する可能性がありますデータ。角度 は、XSRFに対抗する以下のメカニズムを提供する。 XHR 要求を実行すると、$ httpサービスは XSRF-TOKENというクッキーからトークンを読み取り、それをHTTPヘッダーX-XSRF-TOKENとして設定します。あなたのドメインで動作する JavaScriptのみがCookieを読み取ることができるので、サーバー はXHRが ドメインで実行されているJavaScriptから来たものであることを保証することができます。

これを利用するには、最初のHTTP GET リクエストでXSRF-TOKENと呼ばれる JavaScriptで読み取れるセッションCookieにトークンを設定する必要があります。その後の非GETリクエストでは、サーバーは のCookieがX-XSRF-TOKEN HTTPヘッダーと一致することを確認できるため、ドメインで実行されているJavaScriptのみがトークンを読み取ることができることを確認してください。 トークンは、各ユーザーごとに一意でなければならず、 サーバーによって検証可能である必要があります(JavaScriptが独自のトークンを構成しないようにする必要があります)。我々は トークンは、あなたのサイトの認証 のセキュリティのための塩を持つクッキーのダイジェストであることをお勧めします。

+0

ありがとうございますasgoth!これは、CSRFトークンが設定された投稿リクエストを持つための正しい方法ですか?または、隠れたフォームを作成し、ng-click()でstudentIdsのフォームを送信する必要がありますか?しかしその場合、どのように応答データを取得できますか?再度、感謝します! –

+0

私は角度自体から見積もりを追加しました。 – asgoth

+2

このソリューションがAngularのドキュメントと一貫している理由は不明です。クッキーを設定する必要があると書かれていますが、ヘッダを手動で設定しているようです。 – RevNoah

0

を持っています。私の理解では、全てのレールコントローラに対して、角度$ httpでキャッチする(デフォルトのhttp httpの動作)レールCSRF-TOKENを持つクッキーを作成します。

関連する問題