0

クイズのあるウェブサイトがあります。ユーザーは、そのクイズでうまくやることから直接何も得ることはできませんが、FacebookやTwitterで結果を共有することはできます。

問題は、答えが正しいかどうかを確認する方法がわからないことです。各質問の後、ユーザーは、間違っている場合は再起動または続行できる必要があります。または、ユーザーが正しい場合は自動的に続行します。

チェックがサーバー側で行われる場合、ユーザーは回答を送信してから次の質問がポップアップするか、2つの選択肢がポップアップするまで1秒待つ必要があります。しかし、私がクライアント側でそれを行うと、遅延はなく、ユーザーはより幸せになります。

したがって、不正行為で得られるものはそれほど多くありませんが、FacebookやTwitterでそれを誇示するために人々は確かにこれを行います。

では、クライアント側で不正行為をしているユーザーをスポットチェックやその他の方法で検出する方法はありますか?それとも、検証をどこで行うかを単に決定する必要がありますか?

4

1 に答える 1

2

いいえ、クライアント側で検証を行う場合、不正行為を防ぐことはできません。少し難しくすることもできますが、結局のところ、ユーザーのブラウザーを制御することはできず、コードは実行可能でなければなりません。余分な手順を踏まない限り、ページのソースを表示し、コードを見て正解を見つけるだけで簡単にごまかすことができます。不正行為が気になる場合は、サーバー側ですべての検証を行ってください。AJAXを使用して、検証中にシームレスなユーザーエクスペリエンスを作成します。AJAXリクエストを数秒間待つことは悪くありませんし、ユーザーエクスペリエンスを低下させることもありません。

クライアント側の検証に完全に取り掛かっている場合、攻撃者にとって背後で苦痛となる1つのトリックは、JavaScriptルーチンを難読化することです。難読化されたコードジェネレーターをJSeval関数呼び出しにラップすると、攻撃者は質問に対する「正しい」答えを決定する前に、難読化を解除する必要があります。これはSpiderMonkeyを使用して簡単に実行できますが、スクリプトキディや怠惰な人を阻止します。難読化と組み合わせると、ここで間違った答えを使用するというあなたの考えも良いかもしれません。

しかし、結局のところ、私はクライアント側の検証をまったく行いません。AJAX /サーバー側のコンボを使用して、ユーザーにとっても公平な優れたエクスペリエンスを作成します。

于 2013-03-25T15:54:09.883 に答える