2012-04-15 19 views
0

私はどこでも検索し、私が理解できない多くの情報を見つけました。私はWAMPサーバーを使用しており、 "SELECT name FROM Tablename"クエリを実行して、データをjson_encode()に渡しました。今のところ結果は気に入っていますが、サーバーのJSONファイルを保護して、Androidアプリを実行するユーザーのみがアクセスできるようにする必要があります。JSONファイルをREST APIなどの方法で保護するにはどうすればよいですか?

私の研究を通じて、私はRESTが私のための解決策であるかもしれないが、私は自分のためにどのように実装できるのか分からない。サーバー側のRESTセキュリティとクライアント側を同時に持つことは可能ですか?私はRESTがWebサービスであることを理解しており、Webサービスが基本的にWebページであるチュートリアルを読んでいます。私の優先事項は、サーバー側のjsonファイル、セキュリティとスピードです。ユーザーはAndroidアプリ経由で情報を挿入しません。私は特定のjsonファイル(検証)にユーザーとパスワードを使ってAndroidアプリケーションを配備することを考えていました。

My Application Flow

あなたが主題に関連するビデオチュートリアル、または初心者のためのチュートリアルに私を指すことができればそれが役立つだろう。

ここに私の質問がありますか?

  • イメージをJSONで解析できますか?
  • mysqldump - > convert .csv file ---> SQLite?の方が効率的ですか? (安全に)。
  • .CSVファイルはどのくらいの大きさでデータベースに100万エントリありますか?
  • どうすればこのことができますか?

ご協力ありがとうございました。

+0

投稿ごとに1つの質問を入れる必要があります。あなたの他の "特定の質問"セクションをとり、それらを研究した後に他の投稿で具体的に質問してください。 –

答えて

0

解決方法:HTTPヘッダー

安全でない解決策:

User-Agentヘッダを使用しています。

User-Agent: MyAndroidApp/1.0 

より安全なソリューション:

まず第一に、あなたは誰がちょうど簡単に秘密鍵を見ることができないので、SSLを使用する必要があります。

X-Android-Secret-Key: fee400be-7d08-45c5-bf7c-ff79c35a838c 

あなたは、サーバー上のヘッダーをチェックし、必要なヘッダがある場合にのみ、バックファイルを提供:

第二に、あなたはアンドロイドのアプリから作るリクエストのHTTPヘッダに秘密鍵を置くことができます受け取った。ヘッダーはいくらか秘密を保持しますが、SSLでは不可解です。

0

私はアプリ認証に関するあなたの元の質問に答えるつもりです。あなたの他の質問は別々の質問に属します。

クライアントとサーバーだけの場合は、購入することなく相互認証されたSSLを使用できます(また、使用する必要があります)。サーバーとクライアントを制御するので、それぞれが1つの証明書(他の証明書に属する証明書)のみを信頼し、この目的でCAは必要ありません。

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

これは、ここで保証されているよりもはるかに長い答えです。私は段階的にこれを行うことをお勧めします。これは、Web上に、サーバー側とクライアント側の両方で、Androidで自己署名入りのSSL証明書を処理する方法についてのリソースがあるためです。私の本「Androidプラットフォームのアプリケーションセキュリティ」には完全なウォークスルーがあります(O'Reilly出版)。

あなたは通常、その証明書/秘密鍵をsometypeのキーストア(Androidを使用している場合はKeyStore)に保存し、そのキーストアは暗号化されます。その暗号化はパスワードに基づいているため、(1)クライアントのどこかにパスワードを保存するか、(2)クライアントアプリケーションを起動するときにパスワードを尋ねる必要があります。あなたがしなければならないことは、あなたのユースケースに依存します。 (2)が受け入れ可能な場合は、暗号化され、パスワードはどこにも保存されないため、リバースエンジニアリングから資格を保護しています(ただし、ユーザーは毎回入力する必要があります)。 (1)を実行すると、クライアントをリバースエンジニアリングし、パスワードを取得し、キーストアを取得し、秘密鍵と証明書を復号化し、サーバーに接続できる別のクライアントを作成できます。

これを防ぐには何もできません。コードを難しくする(難読化などで)リバースエンジニアリングを行うことはできますが、不可能にすることはできません。これらのアプローチを使用して軽減しようとしているリスクはどれか、それを軽減するためにはどれだけの作業が必要なのかを判断する必要があります。

関連する問題