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 アカウントに関連付ける必要があるということですが、ユーザーがそれらを改ざんするのを防ぐにはどうすればよいでしょうか? デバイスには、信頼できる公開鍵を取得できる証明書が付属していますか (この場合、各デバイスはその公開鍵に関連付けられた行を取得できます)? ここで認証を実装するための最良の方法は何ですか?