2012-04-11 6 views
0

私は、Androidアプリケーションがphpファイルなどにパラメータを送信するAPIを何かしなければならないと思いました。安心してAndroidアプリケーションからリモートデータベースに書き込む

私はある種のハイスコアリストを持つアプリを考えています。提出されたハイスコア値が実際にアプリを通じて達成されていることを確認するにはどうすればよいですか?その人が9001ポイントを達成したとします。これで、file.php?score = 9001呼び出しのようなものが得られるだけであれば、私はPHPの場所を見つけて好きなものを投稿している人々に対して非常に安心感はありません。

この種の問題が発生しましたか?ありがとうございました。

答えて

3

あなたは、要求がどこから来たのか確認する方法がないので、これは100%安全なものにする方法はありません、しかしにそれは少し難しくする方法がありますハイスコ​​アをハックする。これは基本的にセキュリティが不明ですが、ネットワーク接続を調べるのではなく、実際のアプリバイナリを掘り下げる必要があります。

まず、アプリの「パスワード」を選択します。スコアだけを送るのではなく、スコアと連結されたパスワードの暗号ハッシュ(例えば、SHA-256など)も送ってください。サーバー側で、scoreと連結されたパスワードのハッシュを再計算し、これが送信されたハッシュと一致するかどうかを確認します。そうでない場合は、スコア提出を拒否します。 これは、アプリが行うリクエストを見てもスコアを上げることができないため、最初のアプローチよりも幾分安全です。しかし、バイナリコードをアプリから探しても、攻撃者はパスワードを紛失してスコアを提出することができますが、これは非常に関与しており、おそらくあなたの目的には十分です。

もちろん、これはスコアを複製することを排除するものではありません(適切なハッシュがわかったら、何度でもスコアを提出することができます)。もしあなたがこれを避けたいのであれば、サーバーからのリクエスト(ランダム)ID番号、ハッシュスコア+ ID +パスワード、スコア+ハッシュを送信して、サーバーはこのハッシュが良いかどうかをチェックします。サーバーはIDナンバーを覚えておく必要がありますので、これはプログラムに少し関わっています。 より単純な解決策は、各スコアをプレイヤー名に関連付けることであり、1人のプレイヤーにつき1つのスコアしか許可しないことです。その後、パスワード+名前+スコアをハッシュすることができます。

+0

素晴らしいあなたの答えは、取引のセキュリティを実装するための参考資料として便利です。 – kishu27

+0

"あなたの目的には十分である"と言えば、オンラインの高得点リスト(Angry Birdsなど)を持つ大規模なアプリケーションでも同様のアプローチこれに?ちょうど、言及したように、より大きな程度のあいまいさがありますか?良いアイデアをありがとう! – TragedyStruck

0

おはよう!

POSTを使用してサーバーと通信する方がよいでしょう。したがって、追加パラメータを送信することができます。キーをアプリからサーバーに送信し、そこにチェックインします。

PHPのサンプルは:

<? 
$key = trim(htmlspecialchars($_POST['KEY'])); 

if ($key == 'your_secret_string') { 
    //write data to DB 
} 
?> 
+0

"キー"と言うと、それはどういう意味ですか?どのようにソースコードのどれがデコンパイルや類似している人が実際に発見できるかは非常に不明です。私のアプリのどこかに一意の文字列があり、これをPOSTとして送信した場合、誰かがこれを傍受してキーを取得できないでしょうか?どのようにしてこのようなものを安全に実装するのでしょうか? – TragedyStruck

+0

このアプローチだけでは安全ではありません。誰もがネットワーク上のトラフィックを検査し、この性質の鍵を簡単に盗聴して抽出することができます。より安全なアプローチは、httpsと共に標準認証を使用して、トラフィックを保護し、リモートエンドポイントにアクセスすることです。 –

+0

また、認証データ(401)で要求を送信することもできます。 – kpotehin

関連する問題