0

私はクイズのWebアプリケーションを持っています。クイズのプレーヤーは、各質問に答えるのに20秒与えられ、より速く答えると時間ボーナスが与えられます。

操作が困難/不可能な質問にユーザーが答えるのにかかる時間を記録する方法は何ですか?

スコアが最も高いプレイヤーに賞品が授与される可能性があるため、投稿データを操作するインセンティブがあります。

これは私がこれまでに持っていた唯一のアイデアですが、私には簡単に操作できるようです。

  1. 質問はAJAX経由で読み込まれます。
  2. プレーヤーがJavaScriptを介して質問を受信する時間(ミリ秒単位)を保存します。
  3. 質問ごとにハッシュを割り当て、個々の回答ごとにハッシュを割り当てます。
  4. プレーヤーが回答を選択したら、質問のハッシュ+回答のハッシュ+ミリ秒単位の合計時間差のハッシュを含む新しいハッシュを作成します。
  5. そのハッシュをサーバーにPOSTします。
  6. サーバー側では、正解とその質問の時間の組み合わせについて、考えられるすべての有効なハッシュのキャッシュされたインデックスがあります。(質問ごとに合計20,000ハッシュ。ミリ秒ごとに1つ、最大20秒)
  7. 提出されたハッシュがインデックスのハッシュと一致する場合、プレーヤーは正解と時間ボーナスを受け取ります。

送信されるハッシュを処理するためだけに暗号化されたFlashファイルを使用することも検討しましたが、間違えない限り、逆コンパイラーを使用して何が起こっているかを確認するのは非常に簡単です。したがって、それ以上のセキュリティは提供されません。

他に何かアイデアはありますか?

編集-私はこれについて非常に考えていたので、ユーザーが時計を変更できることを完全に忘れていたため、このクライアント側を安全に実行する機会がなくなりました。

したがって、サーバー側のタイムスタンプが実際に信頼できる唯一の方法です。

4

3 に答える 3

4

簡単な答え:クライアントの言うことを信用しないでください。また、可能な限りクライアントに対して何もしないでください。

これにはサーバー側の記録を使用します。例えば

  1. 「gimmethequestiontext」リクエストが入ったときのセッション変数の記録時間を設定します
  2. 答えが来たときにセッションの可変録音時間を設定します

ブーム。ユーザーがこれに影響を与える唯一の方法は、質問テキストを要求し、回答を送信することです。システムクロックを変更したり、ブラウザのデータをいじったり、HTTPリクエストのデータがネットワークに到達したときにデータをいじったりすることは、すべて役に立たないことです。

于 2012-08-17T16:05:30.030 に答える
0

PHPを使用している$_SESSION['receivedQuestion'] = time();場合は、ユーザーが質問を受け取ったときと、ユーザーが質問に答えたときをチェックするように設定できますtime()-$_SESSION['receivedQuestion'] <= 20。これは、ユーザーのインターネット接続が遅い場合に少し問題を引き起こす可能性があることに注意してください。ただし、これはそれほど大きな問題ではないはずです。

于 2012-08-17T16:05:17.197 に答える
0

質問が行われたときのサーバー側のタイムスタンプと、正しく回答されたときの別のタイムスタンプを使用してみませんか?

リクエストの遅延が問題を引き起こす可能性があることは理解していますが、クライアントに任せるのはあまり安全ではありません。

于 2012-08-17T16:05:32.647 に答える