2011-11-14 14 views
3

私は現在、私たちのサーバーにコンテンツを投稿できるiOSアプリを持っています(ツイッター風)。私たちはログインシステムを持っていません。代わりに、ユーザーを一意に識別するためにデバイスのUDIDに依存しています(はい、これは完全ではないが、アカウントを作成しないユーザーにとってはトレードオフの価値があることに注意してください)。迷惑メール防止のためのiOSアプリへのリクエスト

iOSアプリからのリクエストは、私たちのサーバーにPOSTリクエストとして送信され、決して認証されません。

私たちは現在、多くのスパムを経験しています(明らかに)、実際に私たちのサーバーに当たったリクエストは私たちのアプリから来たものであり、スパマーが書いたスクリプトではないことを確認する簡単な方法を探しています。

私たちは、アプリケーション名を含んでいても簡単に偽装されているユーザーエージェント文字列を使用しようとしました。サーバーに当たっているリクエストが私たちのアプリから来ていることを確認する方法はありますか?

考えられる原因の1つは、乱数をパラメータとして含めることで、その数値を秘密鍵で暗号化することです。暗号化されたバージョンがプレーンテキストバージョンであることをサーバーに確認させます。 (秘密鍵は、私たちのサーバー上にあるだけでなく、アプリケーションに組み込まれている必要があります)。

私は完璧なソリューションを探しているわけではありません。実装が簡単な90%のソリューションが好まれています。

ありがとうございます!

+0

ボーナスポイント:サーバーに変更を加えることができます(つまり、新しいクライアントコードは不要ですが、クライアントはまだデバイスから報告されたUDIDを送信するだけです)。 – aloo

答えて

1

私はあなたのアプリにしか知られていない秘密鍵でそれを塩漬けし、おそらくユーザー名とUUIDを追加してSHA-1でハッシュして、メッセージを受け取って解決します。ハッシュがデータと共に提示されると、それはデジタル署名として機能し、メッセージが本物であることを合理的に確信することができます。

共有秘密鍵はアプリと共に配布する必要があります。そのため、攻撃者は非常に厳しい攻撃者があなたのアプリからリバースエンジニアリングできるようになりますが、偶然のスパマーは緑の牧草地を探し出す可能性が非常に高くなります。

もう1つのアプローチは、登録時にpgpのプライベート/公開鍵のペアを生成することですが、これはこの問題のための多くの作業です。