2011-12-29 3 views
0

私は次のようなシナリオがあります: AndroidクライアントはHTTP Post経由でPHPサーバと通信します。 PHPサーバはmySQLデータベースと通信し、出力をJSONとしてAndroidクライアントに送信します。PHPサーバへの接続を確保する

私はトラフィックを盗聴してURLを見つけ、データベースに大量のデータを投稿することに懸念しています。 私はペイロードを盗聴する心配はありません。したがって、必ずしも暗号化されるとは限りません。

私は、HTTP接続のために気になるTLS/SSLを考えていました。しかし、私はこのシナリオではどのような方法が適しているのか分かりません。

+0

これはWebアプリケーションレベルでの認可の問題です。 – Gumbo

+0

はい、そうです。ユーザー名/パスを使用せずに行く方法は何ですか? – tobias

答えて

3

相互認証されたSSLを使用して、サーバーがアプリケーションからの着信接続のみを受け付け、アプリケーションがサーバーとの通信のみを行うようにします。

ここには、高度なアプローチがあります。自己署名入りのサーバーSSL証明書を作成し、Webサーバーに展開します。この目的のためにAndroid SDKに含まれているkeytoolを使用することができます。次に、自己署名付きのクライアントを作成し、アプリケーション内にリソースとしてカスタムキーストアに配置します(keytoolはこれも生成します)。クライアント側のSSL認証を要求し、生成したクライアント証明書のみを受け入れるようにサーバーを構成します。そのクライアント側の証明書を使用して自分自身を識別し、その部分のサーバーにインストールしたサーバー側の証明書を1つだけ受け入れるようにクライアントを構成します。

アプリ以外の誰かがあなたのサーバーに接続しようとすると、サーバーはあなたのアプリに含まれているクライアント証明書を提示しない受信SSL接続を拒否するため、SSL接続は作成されません。

これは、ここで保証されているよりもはるかに長い答えです。私は段階的にこれを行うことをお勧めします。これは、Web上に、サーバー側とクライアント側の両方で、Androidで自己署名入りのSSL証明書を処理する方法についてのリソースがあるためです。 O'Reillyによって出版された私の本のApplication Security for the Android Platformにも完全なウォークスルーがあります。

1

SSLはあなたの助けになりません。データがワイヤに達する前にトラフィックを傍受して、人々はあなたのAPI呼び出しを把握し、DBをうんざりで埋めることができます。

アクセストークンとユーザー名/パスワードの要件でサービスを「保護」することができます。しかし、やはり悪意のあるユーザーが悪いデータでシステムを氾濫させることはありません。しかし、システムにアクセスするために一意のアクセストークンを使用しなければならないため、ユーザーが何をしているのかを追跡することができます。

+0

あなたは正しいです。私はusername/passwordログインを使いたくない。だから私は、アプリケーションを使用している人が私のDBにうんざりを抱えている心配していない。私はPCからの人々が単にそれを洪水することができると懸念しています。 – tobias

関連する問題