3

暗号化に関しては、私はまったくの初心者であり、問​​題がすべて間違っていると思います。説明させてください。

Android アプリケーションがサーバーに接続して、アプリに表示するアイテムを取得したいと考えています。次に、ユーザーがこのアイテムを操作した場合、サーバーにフィードバックを送信して、データベースに保存するためにクリックされたアイテムを伝えたいと思います。

まず第一に、この「フィードバック」をサーバーに送信する際に、ネットワーク経由でこの「フィードバック」を「傍受」してほしくないということです。そこで、https 接続を使用することにしました。しかし、フィードバックを求めて呼び出しているスクリプトがhttps://mydomain.com/myscript.php (POST リクエストを含む) であるとしましょう。誰かが私の Android コードをリバース エンジニアリングして、このスクリプトを呼び出してフィードバックを送信していることを確認したくありません。同じ目的で使用できるからです。

それで、「ねえ、サーバーにフィードバックを送信する必要があるときに、サーバーからキーを取得して返送しましょう」と思いました。しかし、このキーを取得するには、php スクリプトを呼び出す必要があります。誰かがこのスクリプトを呼び出してキーを取得できれば、必要に応じてフィードバックを送信できます。

これには終わりがないように思えます。そして、私は1つあることを知っています:DIは、これを完全に間違った方法で見ていると思います. そのために従うべきガイドラインはありますか?

ありがとう !

4

1 に答える 1

4

クライアントを信用しない

クライアント ソフトウェアに信頼を拡張することはできません。Viega と McGraw による "Building Secure Software: How to Avoid Security Problems the Right Way" に良い引用があります。

シークレットが安全であると仮定して、クライアント コードにシークレットを隠すのが一般的です。クライアント コードにシークレットを配置する際の問題は、有能なエンド ユーザーがクライアントを悪用し、すべてのシークレットを盗むことができることです。真実である必要がある仮定を立てる代わりに、信頼を広げることをためらうべきです。クライアントとサーバーの両方がハッキングされるため、サーバーはクライアントを信頼しないように設計する必要があり、その逆も同様です。信頼への抵抗は、区画化に役立ちます。

解決策

クライアント ソフトウェアは信頼できません。ただし、個々のユーザーを信頼できる場合もあります。そして、スパムを削除できます。考慮事項:

  1. スパム分類子を使用して、スパム投稿を検出します。これには少し時間がかかります。
  2. 単一の IP アドレスからの POST をレート制限できます
  3. フィードバックを書き込むために、ユーザーにアプリへのログインを要求できます。そして、特定のアカウントからのレート制限フィードバック。
  4. さらに良いことに、投稿する前にまず Google+ または facebook のサーバーで自分自身を認証するようにユーザーに要求することができます (つまり、アプリはユーザーにGoogle 資格情報の認証を要求します。Android ユーザーの 95% が Google 資格情報を持っているため、これは彼らにとって非常に簡単なはずです)。 . 次に、各アカウントのレート制限を行います。ほとんどのボットは、登録するためにキャプチャを破る必要があるため、多くの/すべての偽の Facebook/Google+ アカウントにアクセスできません。これにより、ボットによる投稿が非常に困難になります。

大企業は、4、3、1 の組み合わせを使用します。Google Play ストアは、すべてのスパム レビューを検出して削除しようとしていました。しかし、今では#4も使用しています。ログインせずに Google Play ストアにレビューを投稿することはできません。

編集:これも役立つかもしれませんhttp://android-developers.blogspot.ca/2013/01/verifying-back-end-calls-from-android.html?m=1

于 2013-02-02T01:48:48.980 に答える