2012-04-29 30 views
1

私はiPhoneアプリケーションを作成しています。安全な通信iPhoneとデータベース

アプリケーションでは、データベースと通信する必要があります。私は周りを見回し、最良の方法はiPhone - > webserver - > mysqlであることが分かった。

httpsを使用すると、トラフィックはプレーンテキストになりません。

しかし、私はまだセキュリティについて懸念しています。

私は、Webサーバーとの現在のセッションを認証するauth.phpを持っているとしましょう。そして、ゲームや何かを持って、結果をregisterresult.phpで登録すると、ユーザーは引き続きウェブサイト経由でauth.phpにログインし、自分自身の結果をregisterresult.phpに登録します。

(ImがデータをポストするPOSTメソッドを使用して)

あなたが問題を参照してください?

私はこれを見てきました: http://www.icodeblog.com/2009/10/29/iphone-coding-tutorial-creating-an-online-leaderboard-for-your-games/2/

しかし、本当に良い方法、またはよりよいがあるということですか? (各ステートメントでハードコードされた「キー」を送信する)

httpsが使用されていなかった場合、そのキーは平文になりますか?

+0

結果データを「registerresult.php」に送信する前に暗号化して署名しても(人が偽造するのがずっと難しくなります)、署名キーは携帯電話のアプリに埋め込まれている必要があります。したがって決定されたクラッカーは依然として結果を偽造する可能性がある。私はあなたがサーバー上でゲームを実行する必要があると思うので、ユーザーが偽造された結果を提出できないことを確実にするために州の情報がそこに保持されます(しかし、私は他人の選択肢を聞くことに非常に興味があります)。 。 – eggyal

+0

ええ、それは私の言いたいことは、ローカルにキーを保存することは最適ではないようです。それはおそらく私がやることだとは思いますが、人々は偽物を提出するためにどれくらいの努力を払うのでしょうか?(私はそれを食べてはいけないと思っています:P) – netigger

+1

人々が取り入れる努力の量はあなたのゲームがいかに成功しているか重要であるか、あるいはどのような賞品を得ることができるかのいくつかの機能。このルートを下っていくと、あなたが引用した記事のアプローチはあまり良くありません(単なるパケットスニッファが秘密鍵を見ることになります)。安全なハッシュ(データ、ランダムソルト値、秘密鍵)を取る方が良いでしょう。既知の秘密鍵からハッシュを再計算し、それが検証できることを確認できるサーバに(データ、同じsalt値、ハッシュ)を送信します。 – eggyal

答えて

2

のリンク(答えからのアップグレード)

は、それは総合的なセキュリティを実現することは不可能ですです、等)を使用して、それらに対して適切に防御する。

たとえば、結果データをregisterresult.phpページに送信する前に暗号化して署名しても、ユーザーの携帯電話に署名キーが埋め込まれている必要があります。したがって、決定されたクラッカーは引き続きキーを抽出して偽造された結果。私はあなたのサーバー上でゲームを実行しなければならないと思うので、その性質の脅威に打ち勝つために状態情報が保持されます。

しかし、それは誰もが(おそらくゲームは非常に人気があったか、いくつかの材料値の賞品を支払わない限り)iPhoneのゲームをクラックするために、このような長さに行くとは考えにくいです。高度に熟練した少数の人々が偽造結果を送ることに成功したかどうかは、あなたにとって重要なのでしょうか?考えてみる価値があります。

あなたは、このような脅威に耐えることができることを決定した場合、あなたの質問に引用されたアプローチは、いくつかの欠点があります。 HTTPSはパケットスニファによって傍受されるから秘密鍵を保護しながら、それが(そのように追加された自己署名の一つとして、電話で受け入れられているSSL証明書を提示透過プロキシによって傍受されなくなることはありませんそのキーチェーン)。

この種の脅威を打ち負かすには、(データ+ランダムソルト値+秘密キー)の安全なハッシュを計算し、サーバーにそのデータ(同じソルト値、そのハッシュ値)を送信することをお勧めします。サーバーは、ハッシュが既知の秘密鍵からのものであったはずであったものを再計算し、それが受信したハッシュと照合することを確認することができる。

+0

+1 HTTPSの上に追加のレイヤーを追加して、アプリケーションのキーを掘り下げるようにします。 eggyvalが述べているように、HTTPSだけに依存しないでください。また、もう一つ考慮すべきことは、ゲームの動きを記録してサーバーに送信することです。サーバは同じスコアで到着したかどうかを見るためにそれを再生することができる。 –

0

上記のユーザー@eggyalは最高の答えです。 Uプロジェクトで暗号化を使用したほうがいいです。その後、データベース用のurサーバファイルにデータを送ります。サーバー側では、受信したデータをフロントエンドから復号化し、その後、データベースと通信します。安全な通信になるでしょう。暗号化と復号化の方法を使用します。あなたは常に脅威は彼らが資源不足か、誰から(あるかを検討する必要があります。ここでは

Encryption and decryption.

関連する問題