0

私は、Android アプリがパラメーターを php ファイルなどに送信する、ある種の API を実行する必要があると考えました。

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

この種の問題に関する意見はありますか?ありがとうございました。

4

2 に答える 2

3

リクエストの送信元を確認する方法がないため、これを 100% 安全にする方法はありませんが、ハイスコアのハッキングを少し難しくする方法はあります。基本的にはあいまいさによるセキュリティですが、ネットワーク接続を調べるだけでなく、実際のアプリ バイナリを掘り下げる必要があります。

まず、アプリの「パスワード」を選択します。スコアだけを送信する代わりに、スコアと連結されたパスワードの暗号化ハッシュ (SHA-256 など) も送信します。サーバー側で、スコアと連結されたパスワードのハッシュを再計算し、これが送信されたハッシュと一致するかどうかを確認します。そうでない場合は、スコアの提出を拒否します。アプリが行うリクエストを調べてもスコアを偽造できないため、これは最初のアプローチよりもいくらか安全です。ただし、アプリからバイナリ コードを調べることで、攻撃者はパスワードを回復し、スコアの送信を偽造することができますが、これは非常に複雑であり、目的には十分である可能性があります。

もちろん、これはスコアを複製できることを排除するものではありません (適切なハッシュがわかれば、何度でもスコアを送信できます)。これを防ぎたい場合でも、スコアを送信するには、次のようにする必要があります: サーバーから (ランダムな) ID 番号を要求し、スコア + ID + パスワードをハッシュし、スコア + ハッシュを送信すると、サーバーはこのハッシュが適切かどうかをチェックします。サーバーは ID 番号を記憶する必要があるため、これはプログラミングが少し複雑になります。より簡単な解決策は、各スコアをプレーヤーの名前に関連付け、プレーヤーごとに 1 つのスコアのみを許可することです。次に、パスワード + 名前 + スコアをハッシュできます。

于 2012-04-11T23:09:19.010 に答える
0

こんにちは!

POST 経由でサーバーと通信することをお勧めします。そのため、キーなどの追加のパラメータをアプリからサーバーに送信し、そこで確認することができます。

PHPのサンプル:

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

if ($key == 'your_secret_string') {
   //write data to DB
}
?>
于 2012-04-11T22:59:50.010 に答える