10

特定のアクションがユーザーの「カルマ」を獲得する Web アプリに取り組んでいます。カルマの増分は、DB 内の数値を増分する単純な AJAX 要求です。ユーザーが重複した AJAX リクエストを手動で作成し、自分のスコアを何度もインクリメントするのを防ぐにはどうすればよいでしょうか?

編集: ユーザーのカルマを獲得するアクティビティはすべて、javascript を使用してクライアント側で行われます。そのため、サーバーがアプリからの「本物の」リクエストなのか、ユーザーがコンソールに $.post と入力して作成した「偽の」リクエストなのかを知る方法はありません。

Edit2:この問題を扱う同様の SO の質問が見つかりました。難読化によるセキュリティが最善の策だというのが答えのようです。セキュリティを保証することはできません。そのため、AJAX 呼び出しの内容を読みにくくする暗号化ツールなどの提案をいただければ幸いです。

4

5 に答える 5

0

ログインしたユーザーがカルマの所有者であるかどうかを次のように確認できます。

if current_user.id == karma.user_id
  #... throw error
else
  karma.save
end
于 2012-07-12T18:20:14.410 に答える
0

一般的に、私はセキュリティに関するアドバイスを提供することに不安を感じていますが、これは単にアプリのカルマを増やすためのものなので、試してみることにします。

HMACダイジェストを使用するのはどうですか? クライアントがアプリにログインするときにクライアント用のキーを生成する必要があり、クライアントはカルマをインクリメントするときに 3 ビットのデータを送信する必要があります。

  1. 彼らは誰ですか(ユーザー名)。
  2. 増加させたいユーザー (ユーザー名)。
  3. ログイン時に提供したキーの HMAC ダイジェストと、両方のユーザー名の連結。

次に、サーバーは上記の (1) でユーザー名のキーを検索し、読み込まれたキーの HMAC ダイジェストとユーザー名の連結を、上記の (3) で提供された HMAC ダイジェストと比較します。

(1) と (2) のユーザー名が等しく比較されるケースを完全に拒否することができます。これにより、ユーザーが自分のカルマを増やすことができなくなります。

ダイジェストが一致しないケースを拒否することもできます。これにより、ユーザーがカルマの増分リクエストを偽装しようとするケースが検出されます。

ログイン時に共有したキーが傍受された場合、別のユーザーがそれを使用して誤ったカルマの増分を生成する可能性があります。

これを実装するには、Ruby と JavaScript の両方の HMAC 実装を見つけることができるはずです。

于 2012-07-12T16:37:22.587 に答える
0

この問題にはいくつかの解決策があります。それらの 1 つは、リンクやボタン、またはクリックして AJAX 要求を送信するものを「無効にする」ことです。
JQuery を使用する場合、これに対するいくつかのコールバックがあります:beforeSendおよびsuccess. beforeSendコールバックでトリガーを「無効」にして、 success(またはcomplete)コールバックでトリガーを「有効」にすることができます。

$.ajax({
  url: "/example",
  beforeSend: function(){
    #disable trigger
  },
  complete: function(){
    #enable trigger
  }
})

しかし、私はそれが一種のハックだと思います:)

于 2012-07-12T14:39:38.120 に答える
0

サーバーは、ajax 呼び出しの実行が「論理的」か「偽物」かを推測するために、クライアントのアクティビティを追跡する必要があります。これは、(いくつかの要因に応じて) 偽造することもできるため、セッションを使用して実行することも (推奨されません)、またはデータベースで直接実行することもできます。

于 2012-07-12T14:45:24.627 に答える