6

アプリ アカウントや OpenID などの資格情報を一切使用せずに、投票システム (賛成票、反対票) を実装することを検討しています。

順番に懸念事項:

  1. ロボットの投票を防ぐ
  2. 他の誰かの投票を上書き/無効にすることなく、NAT の下で個人が投票できるようにする
  3. ユーザーが複数回投票するのを防ぐ (または、少なくとも非常に困難にする)

私の質問:

  1. 似たようなものを実装した場合、ヒントはありますか?
  2. おそらく私が見落としている懸念はありますか?
  3. おそらく調べるべきツールはありますか?

これらの質問のいずれかに対する回答を作成するのに役立つ質問がある場合は、コメントで質問してください。

4

2 に答える 2

4

あなたの懸念に対処するには:

1: 単純な Captcha でおそらくうまくいくでしょう。「django captcha」をグーグルで検索すると、たくさんのプラグインがあります。私自身は使ったことがないので、どれが一番良いとは言えません。

2 & 3: Django のセッションを使用すると、これらの問題の両方に対処できます。これを使用すると、ユーザーのブラウザーに Cookie を保存して、その人が既に投票したことを示すことができます。これにより、人々は明らかに別のブラウザーを介して、またはキャッシュをクリアすることで投票できるようになるため、人々が 2 回投票できないことがどれほど重要かによって異なります。ただし、実際にキャッシュをクリアしようと考える人はごくわずかだと思います。私が知る限り、サインイン プロセスなしでユーザーを制限する他の唯一の方法は、IP アドレスをテストすることですが、同じネットワーク上のユーザーが同じ IP アドレスを持っていると表示されるため、それは 2 番目の基準に違反します。

ブラウザーの Cookie を削除するだけの簡単な方法で複数の投票を行いたくない場合は、facebook または twitter のログインを許可することもできます。django-socialregistration プラグインは十分に文書化されており、簡単に実装できます。

それが役立つことを願っています!

于 2011-02-18T00:05:33.810 に答える
0

Recaptcha は優れた選択肢です。Django の場合、これが私が最も成功したもので、(オンザフライで生成されたローカル イメージとは対照的に) Recaptcha から読み込まれたイメージを実際に使用します。

http://pypi.python.org/pypi/recaptcha-client#downloads

インストール手順は次のスニペットにあります。

http://djangosnippets.org/snippets/433/

あなたがやっていることに対して Recaptcha が少し扱いに​​くい場合、フォームがロードされたときに対応するタイムスタンプ値を含む非表示の入力をロードするフォームを実装している人たちの話を聞いたことがあります。次に、フォームが送信されたら、新しいタイムスタンプを生成し、2 つの差を取得します。秒単位の差が、人間の訪問者にとって不合理な特定のしきい値を下回っている場合は、ボットを使用している可能性があります。これは、複数のフィールドを持つ連絡先フォームで機能します... 通常、入力するのに 10 秒以上かかります。

この手法が実際に本番環境でどれほど効果的かは、私にはわかりません....最近のスパム ボットの多くは、私よりも賢いです。しかし、それはあなたが調べたりテストしたりすることを検討したいものかもしれません.

于 2011-02-18T18:00:05.683 に答える