2

Android GCM (プッシュ通知サービス) の登録プロセス中に、モバイル クライアントDjango ビューに対してPOST 要求を行う必要があります。デフォルトでは、ビューには csrf_token が必要ですが、@csrf_exempt デコレーターで無効にすることができます。

私の質問は: csrf でビューをチェックしないとどうなりますか? モバイル クライアントから (ある種のソルトを使用して) トークンを作成することは理にかなっていますか?

4

2 に答える 2

2

それは本当にあなたの見方の性質に依存します。

csrf トークンは、同じ PC で既に認証されているときに、意図しないアクションの呼び出しを防ぐのに役立ちます。たとえば、Django アプリにhttp://www.example.com/person/delete/356という URL が存在するとします。POSTすると、ID 356の人が削除されます。起動するには認証が必要なため、これは通常は問題ありません。ただし、1 つのタブで Django アプリケーションにログインしていて、誰かが「http://www.example.com/person/delete/356」というリンクを含むフィッシング メール (または類似のメール) を送信した場合はどうでしょうか。クリックします。それと、別のタブで既に認証されているため、機能します。Django に csrf トークンを期待させることにより、Django は実際に期待する要求のみを実行します。つまり、Django はトークン "12345ab" を発行したことを認識しているため、トークン "12345ab" を含む要求が返された場合、トークンが欠落している場合はアクションに罰金を科します。または、「98765zx」を送信すると失敗します。

認証がなく、ビューが何も動作しない場合 (つまり、データを変更せずに表示するだけ)、@csrf_exempt を作成するリスクはかなり低いです。

同様に、これがモバイル アプリ内で発生し、ビューが認証されている場合、認証はブラウザー タブと同様にアプリ間で共有されないため、リスクは低くなります。

HTTP リクエストをセットアップするときに、期待される csrf トークンを何らかの方法で取得できる場合は、他のオプションも利用できます。AJAX 呼び出しの場合と同様に、ヘッダーを設定できます。Django のドキュメントはこちらを参照してください。

于 2012-12-05T11:27:11.743 に答える
1

これは、多くの要因、具体的には登録ID以外に収集しているもの、およびクライアントがPOSTのためにサーバーに接続している方法によって異なります。

CSRF検証なしのGCM登録の最悪のシナリオ

攻撃者は、自分の管理下にあるデバイスを被害者のアカウントに登録し、被害者向けの通知を受け取る可能性があります。

何をしているのかによっては、これはそれほどひどいことではないかもしれません。特に、GCMメッセージに機密情報が含まれることは想定されておらず、より安全な方法で情報をロードするためのトリガーとして機能することを考えればなおさらです。

(つまり、GCMが認証に基づいてクライアントデバイスに新しいページをロードするアクティビティをトリガーした場合、攻撃者のアプリは被害者の資格情報を使用して認証されないため、機密情報を見ることができません)。

それは何よりも厄介なことになるでしょう。

これから保護したい場合

  1. Namが述べたようにトークンを設定します-サーバーから(つまりJavaScriptコールバックから)GCM登録アクティビティを開始する場合は、クライアントが登録で返す必要があるトークンを設定するだけです。CSRFリクエストはこのステップとは非同期であり、トークンがないために失敗します。

  2. アプリがアプリ専用のサブドメインを介してサーバーと通信する場合(つまり、サブドメインレベルで認証Cookieを使用するapp.site.com)、アプリケーションが独自のドメインを排他的にロードする(つまり、外部Webサイトがない) )、サーバーはそのサブドメインの登録ビューへのアクセスのみを許可しているため、悪用するのは非常に困難です。CSRF攻撃はブラウザで発生する可能性があります。

  3. CookieManagerを使用してアプリ内のサイトCookieからCSRF免除値を取得し、それをリクエストとともにPOST変数として追加します。そうすれば、ビューのCSRFを免除する必要はありません。これは基本的に、DjangoがAJAXCSRFを処理する方法です。登録する前に必ず@ensure_csrf_cookieデコレータを使用して、CSRFCookieがクライアントに設定されていることを確認してください。

結論

正直なところ、GCM登録のCSRFは、「夜更かしするための問題」トーテムポールについては非常に低いです。CSRFは、アカウント管理(パスワードの変更、銀行取引など)の問題です。

于 2012-12-17T10:53:39.133 に答える