3

Android から PHP サーバーに HTTP リクエストを送信する Android アプリを作成しました。応答として、Web サービスは JSON オブジェクトを Android アプリに送信し、結果を表示します。

サービスの1つのように

http://mydomain.com/test/weather.php?lat=13.4332&long=80.454

私はアンドロイドの専門家ではないので、PHP 側から Web サービスのセキュリティを処理したいと考えています。

自分のアプリだけが自分の web サービスを使用できるように、自分の web サービス呼び出しを保護するにはどうすればよいですか? 誰かがapkを解読してWebサービスのURLを取得し、出力データをカスタマイズした後にそれを使用したくない.

どうすればこれを達成できますか?何か良い例を教えてください。

4

2 に答える 2

6

可能であれば、アプリで HTTPS の使用を実装する必要があります。これにより、多くのセキュリティ問題が解決される可能性があります。この目的のために、自己署名サーバー SSL 証明書を作成し、Android SDK の keytool を使用して Web サーバーにデプロイします。次に、自己署名クライアントを作成し、それをアプリケーション内にリソースとして含まれるカスタム キーストアにデプロイします (keytool はこれも生成します)。クライアント側の SSL 認証を要求し、生成したクライアント証明書のみを受け入れるようにサーバーを構成します。 oReilly : Android プラットフォームのアプリケーション セキュリティ または クライアントとサーバーのみの場合は、何も購入せずに SSL を使用できます (使用する必要があります)。サーバーとクライアントを制御するため、それぞれが 1 つの証明書のみを信頼する必要があり、もう一方の証明書は信頼する必要があり、この目的のために CA は必要ありません。PHP は、POST または GET を介してサイトやインターネット ブラウザからデータを受信できます。 . これを行うために使用される方法の 1 つは、curl によるものです。PHP で POST または GET によって受信した情報を確認する必要があります。この言語には、これらの「問題」を解決する多くの機能があります。PHP公式ドキュメントのこの部分を見てください。

ログイン システムを構築しているとします。また、ログイン ページに追加して、一度だけ発生する秘密の一意のコードを含む非表示の要素を配置し、この秘密のコードをセッションに保存して、ログ スクリプトがセッションでこのコードを検索することもできます。スクリプトに投稿されたものと比較して、続行する必要があります。

また、訪問者の IP アドレスを取得する場合は、次のようにします。

function getRealIpAddr()
{
    if (!empty($_SERVER['HTTP_CLIENT_IP']))   //check ip from share internet
    {
      $ip=$_SERVER['HTTP_CLIENT_IP'];
    }
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   //to check ip is pass from proxy
    {
      $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    else
    {
      $ip=$_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

ここで調べたい:モバイルアプリ内のデータを暗号化してWebサービスに送信するWebサービス:不正アクセスを防ぐ方法

于 2013-05-15T02:29:02.627 に答える
1

POST リクエストで、送信者の ID を確認するための追加フィールドをリクエストしてください。このフィールドでは、md5 アルゴリズムによって生成されるようなハッシュ シーケンスを使用できます。

したがって、Android アプリでは、次のように、識別子と一般的な文字列を使用してハッシュ文字列を生成します。

$identifier='Here comes an understandable unique Id for your App user';
$common_sequence='Here comes random sequence, the same to be used server-side';

$hash_sequence=crypt($identifier . $common_sequence);

POST には、このための 2 つのフィールドがあります。

  • Hash_sequence
  • ユーザーID

サーバーでは、common_sequence と userId が既にあるため、hash_sequence を再生成できます。それらが一致するかどうかを確認します。

ただし、このソリューションにはいくつかの弱点があります。特に、hash_sequence を複数回使用できるという事実です。たとえば、yyyymmddHHmm のように、生成シーケンスに時間要素を挿入して、シーケンスが 1 分ごとに変わるようにすることを検討できます。

Crypt() は、PHP で hash_sequence を生成する関数です。ただし、アプリで同様のシーケンスを生成する方法が必要です。この場合、単純な MD5 ハッシュで十分であり、Android Dev 言語にネイティブな MD5 ジェネレーターが必要です。

幸運をお祈りしています、

于 2013-05-15T02:26:05.347 に答える