2

ユーザーが評価を追加できるアプリを持っています。そのために登録する必要はありませんが、ボットが評価を簡単に操作できるようにしたくありません。

ユーザーが人間であることを合理的に確信できる方法はありますか (100% である必要はありませんが、リアクティブなヒューリスティック手法は使用したくありません)。CAPTCHA / サインイン / その他の操作は必要ありません。通常、これは不可能と言えますが、私のアプリは Android で実行されるため、何もしないよりはましだと思います。

Gmail アドレス。

私が最初に考えたのは、彼らの gmail アドレスを から取得するAccountManagerことでしたが、彼らがそのメール アドレスを所有していることを確認する方法がわかりません。つまり、ボットがでっち上げのメールを私のサーバーに送信する可能性があるため、これはできないと思います。動作します(Googleアカウントを使用してアプリを認証させたくありません。これを行う可能性は低いです)。

GCM

次に考えたのは、Google の Cloud Messaging を使用することでした。デバイスからクラウド メッセージング ID を取得してサーバーに送信し、ランダムなクラウド メッセージをサーバーからデバイスに送り返し、そのメッセージをサーバーに送り返すことができます。これは少なくとも、彼らが gmail アカウントを持つ Android デバイスを持っていることを確認していると思います。これで十分です。

SMS

もちろん、彼らに SMS を送ることもできますが、それにはお金がかかりますし、シームレスであるということは、彼らのメッセージを読む許可が必要であることを意味します (特に評価はオプション機能なので)。

Android ライセンス サーバー

Licensing Verification Libraryを使用して、ユーザーが市場からダウンロードしたことを Google から署名付きで保証することは可能かもしれませんが、私のアプリの性質上、市場に出すことはできません。

デバイスID、EMEI、電話番号など

もちろんこちらは使えません。ボットはそれらを構成することができます!

したがって、GCM は最良の (そして唯一の) オプションのように見えます。他に考えられる人はいますか?

4

2 に答える 2

0

いくつかのポップアップをランダムに表示し、閉じるボタンを別の場所に配置して、ユーザーがそれらを閉じる必要があるようにします。

また

ドラッグ ドロップ API を使用して、ユーザーにボタンを画面上の領域にドラッグ アンド ドロップしてから評価を送信するように依頼します。ボタンの配置をランダムにすることができます。

ボタンをドラッグできる場所は複数ある可能性がありますが、ユーザーに正しい場所に配置するように指示できます。

于 2012-10-18T13:51:24.867 に答える
0

通信の両側を制御すると、次のようなことができます。

フロー

  1. アプリ: サーバーからワンタイム シークレット トークンを要求します。
  2. サーバー: ワンタイム シークレット トークンとトラッキング ID を作成し、トラッキング ID を使用してシークレット トークンを追跡しながら、両方をアプリに送信します。
  3. アプリ: ワンタイム シークレット トークンを使用して投票を暗号化します (暗号化については以下を参照してください)。
  4. アプリ: 暗号化されたメッセージと追跡 ID をサーバーに送信します。
  5. サーバー: 追跡 ID を使用してシークレット トークンを見つけ、まだ使用されていないことを確認し、シークレット トークンを使用して投票を復号化します。

暗号化

任意の対称暗号化テクノロジを使用できます。非常に単純な例は、アプリ側のシークレット トークンを使用してメッセージ (つまり、投票) を XOR することです。サーバー側で、同じ秘密トークンを使用して再度 XOR を実行すると、プレーン メッセージが再び返されます。

この方法は、暗号化の方法が攻撃者に知られていなければ安全です。もちろん、それがわかっている場合、彼はアプリが行うリクエストをシミュレートできますが、すべてのメソッドに当てはまるため、単純な XOR よりも優れたものを使用する必要があります。

于 2012-10-19T12:45:49.597 に答える