0

iOS と Android で動作するアプリがあります。そのアプリにプッシュ通知を追加する作業を行っています。

大まかに言うと、デバイスは Apple Push Notification Service (APNS) または Google Cloud Messaging (GCM) に登録し、トークンを受け取ります。次に、通知の送信を担当するサーバーにそのトークンを返します。そのサーバーは、必要に応じて APNS または GCM に通知を送信し、「これらのトークンを使用してこの通知をデバイスに送信してください」と言います。

そのため、アプリはトークンをサーバーに安全に送信し、ユーザーが通知を受け取りたくない場合はそれらのトークンをサーバーから削除できる必要があります。?create=<token>?delete=<token>などを処理するサーバー側に単純な CRUD ページを追加するのは非常に簡単です。

しかし、誰かが私のサーバーにアクセスしてランダムな値をスパム送信し始め?delete=<token>たらどうなりますか?

「削除」のケースについてもう少し考えてみましたが、簡単だと思います。アプリは、最初の「このトークンを作成する」リクエストで、生成された公開復号化キーを送信するだけです。その鍵は、トークンに対して保管できます。アプリが削除する場合、アプリはトークンの暗号化されたコピーを送信できます。サーバーはトークンを復号化されたコピーと照合し、アプリが秘密暗号化キー (既知の秘密である) と一致する格納された公開キーを所有している必要があることを確認します。アプリのみ)。

誰かがランダムな値をスパム送信し始めたらどう?create=<token>なりますか? 彼らは私のデータベース テーブルを偽のデバイス トークンでいっぱいにすることができますか?

簡単な答えはわかりません — 任意の 1 つの IP アドレスからの「作成」リクエストをレート制限することは、登録を必要とせずにできる最善の方法のようです。それは明らかに、分散攻撃に対する私たちの助けにはなりません。

理想的には、デフォルトでプッシュ通知を有効にしたいと思います/ユーザーが「登録」する必要はありません。私が最初に考えたのは、各デバイス トークンを既知の正規の Apple ID または Google アカウントに関連付ける必要があるということですが、ユーザーがそれらを改ざんするのを防ぐにはどうすればよいでしょうか? デバイスには、信頼できる公開鍵を取得できる証明書が付属していますか (この場合、各デバイスはその公開鍵に関連付けられた行を取得できます)? ここで認証を実装するための最良の方法は何ですか?

4

2 に答える 2

4

Android の問題の解決策は、ここにあります。要するに次のように要約できます。

Google Play サービスから入手できる GoogleAuthUtil クラスを使用して、「ID トークン」と呼ばれる文字列を取得します。トークンをバックエンドに送信すると、バックエンドはそれを使用して、どのアプリがトークンを送信し、誰がアプリを使用していたかを迅速かつ安価に確認できます。

于 2013-05-08T05:26:26.547 に答える