我正在尝试进行 ASP.NET (C#) 投票,该投票将询问用户是/否问题并将投票记录到数据库中。为了防止垃圾邮件,我希望能够确保用户只能投票一次。我考虑过记录用户的 IP 地址。如果这是答案,有人可以给我一个教程,说明如何完成。如果这不是答案,请给我您的建议。
编辑:我不要求用户注册,因为这不是我的网站。
我正在尝试进行 ASP.NET (C#) 投票,该投票将询问用户是/否问题并将投票记录到数据库中。为了防止垃圾邮件,我希望能够确保用户只能投票一次。我考虑过记录用户的 IP 地址。如果这是答案,有人可以给我一个教程,说明如何完成。如果这不是答案,请给我您的建议。
编辑:我不要求用户注册,因为这不是我的网站。
如果您可以对用户进行身份验证,您只能保证每个用户都有一票。因此,您需要一种身份验证机制,这将允许您阻止用户注册多个帐户。
我只能在用户向他的帐户中投资的环境中看到这项工作,例如在线报纸的订阅者或 StackOverflow 上的声誉系统。
如果您有注册用户列表,请向他们发送一封电子邮件,其中包含生成的包含 guid 的唯一链接(例如),将 GUID 记录在数据库中并在投票时进行匹配。
如果您谈论的是通常可公开访问和安全的,那么 IP 地址本身是不够的(谷歌电子选举投票解决了与安全公众投票相关的许多问题)。
您是否考虑过使用其中一项免费投票服务?
您不能将单次投票限制为一个 IP 地址。IP 地址不等于单个用户。一个 IP 地址代表一个或多个用户。
IP 地址也不适用于在代理后面工作的数百万人。
Cookie 是部分解决方案,但投票机器人无法发送 cookie。
登录会话是防止双重投票欺诈的唯一方法,但由于您明确要求记录 IP 地址的方法,您可以通过以下方式获得:
HttpContext.Current.Request.UserHostAddress;
或者
HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
应该很容易保存到数据库并检查每次轮询中是否已经存在 IP。
进行需要电子邮件确认注册的注册,并确保电子邮件地址在您的用户中是数据库中的唯一列。然后将投票与电子邮件地址联系起来。它不会完全阻止拥有多个电子邮件地址的袜子木偶,但至少会让大多数人不值得付出努力。
IP 和用户代理的组合可以给你一个合理的解决方案。
我同意一个 IP 地址不对应一个用户,但我认为这是维持每人一票的最安全方式。我通常使用 cookie 来跟踪谁投票。当然,这是一个简单的技巧,您可以删除 cookie,然后再次投票。如果投票只是一些随机的东西,那么我真的不在乎。如果正确的投票对您的应用程序真的很重要,那么请使用 IP 地址。