6

ユーザーにはい/いいえの質問をし、その投票をデータベースに記録する ASP.NET (C#) ポーリングを作成しようとしています。スパムを防ぐために、ユーザーが 1 回だけ投票できるようにしたいと考えています。ユーザーの IP アドレスをログに記録することを考えました。これが答えである場合、誰かがこれを達成する方法を示すチュートリアルを教えてくれますか? これが答えでない場合は、提案をお願いします。

編集:これは私の Web サイトではないため、ユーザーに登録を求めているわけではありません。

4

8 に答える 8

13

ユーザーを認証できる場合にのみ、各ユーザーが 1 票を持っていることを保証できます。そのため、ユーザーが複数のアカウントを登録できないようにする認証メカニズムが必要になります。

これが機能するのは、オンライン新聞の購読者や StackOverflow のような評判システムなど、ユーザーが自分のアカウントに何かを投資した環境でのみです。

于 2009-02-07T01:22:53.170 に答える
4

登録済みのユーザー リストがある場合は、GUID (たとえば) を含む生成された一意のリンクを含む電子メールをユーザーに送信し、GUID をデータベースに記録し、投票で一致させます。

一般に公的にアクセス可能で安全であることについて話している場合、IP アドレスだけでは十分ではありません (安全な一般投票に関連する多くの問題については、Google の電子選挙人投票)。

無料投票サービスの利用を考えたことはありますか?

コンドルセ インターネット投票サービス

于 2009-02-07T01:23:39.080 に答える
4

1 つの投票を 1 つの IP アドレスに制限することはできません。IP アドレスは 1 人のユーザーと同じではありません。IP アドレスは、1 人以上のユーザーを表します。

于 2009-02-07T01:36:43.547 に答える
3

プロキシの背後で作業している何百万人もの人々にとって、IP アドレスは機能しません。

Cookie は部分的な解決策ですが、投票ロボットは Cookie を送信できませんでした。

于 2009-02-07T01:25:58.670 に答える
2

ログインセッションは二重投票詐欺を防ぐ唯一の方法ですが、IP アドレスをログに記録する方法を明示的に要求するため、次の方法で取得できます。

HttpContext.Current.Request.UserHostAddress;

また

HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

DB に保存し、各ポーリングに IP が既に存在するかどうかを確認するのは簡単です。

于 2009-02-07T01:28:37.650 に答える
1

登録の電子メール確認を必要とする登録を行い、電子メール アドレスがユーザー間で DB 内の一意の列であることを確認します。次に、投票をメールアドレスに結び付けます。複数の電子メール アドレスを持つ靴下操り人形を完全に防止することはできませんが、少なくともほとんどの場合、努力する価値はありません。

于 2009-02-07T01:34:16.110 に答える
0

IP とユーザーエージェントを組み合わせることで、妥当な解決策を得ることができます。

于 2009-02-07T01:39:23.293 に答える
0

1 つの IP アドレスが 1 人のユーザーに対応していないことに同意しますが、それが 1 人 1 票を維持する最も安全な方法だと思います。私は通常、誰が投票したかを追跡するために Cookie を使用しています。もちろん、これは簡単なハックで、Cookie を削除してから再度投票するだけです。投票がランダムなものである場合、私はあまり気にしません。アプリケーションにとって正しい投票が本当に重要な場合は、IP アドレスを使用してください。

于 2009-02-07T03:28:24.180 に答える