表单输入 - 限制为每个IP /计算机一次提交

时间:2010-04-26 20:17:24

标签: php forms codeigniter cookies ip-address

我在php编写抽奖活动表格,用户在表格中提交一些信息并存储在数据库中。

我想找到一种方法将此表格限制为每人提交一份。丢弃cookie或IP地址。什么是最好的方法来解决这个问题?

我正在使用代码点火器构建它,如果这有任何区别的话。

6 个答案:

答案 0 :(得分:2)

简单回答,将IP记录在信息存储的同一行中。如果您做cookie,机器人或用户可以轻松删除cookie破坏您的保护方案。因此,只需记录IP地址,然后在接受提交之前查询每个条目的唯一性。

答案 1 :(得分:1)

他们都有自己的缺点tbh。 Cookie易于伪造且易于删除,这将允许多次投票。通过IP限制更好,但IP地址可以在网络内共享,也可以代理以避免检测。最好的选择是依靠电子邮件地址之类的东西,并强迫用户点击电子邮件链接来确认投票,诚然,虽然这不是很好。

答案 2 :(得分:1)

您可以使用多种方法来减轻随意作弊。在我看来,如果没有更正式的验证过程(cc授权等等),你不应该期望能够阻止一个坚定的骗子。

最简单的方法是在获胜时要求住址以发送货物:)

首先,拒绝欺骗者的任何反馈渠道,以便能够判断他们的提交是被接受还是被拒绝。如果接受的条目略有延迟,请确保添加一些带有一些抖动的假延迟,这样他们就无法判断他们阻止您的反作弊方法是否有效,或者即使您有任何反作弊方法。当他们觉得自己不需要有创意时,可以更容易地检测骗子的批量提交。

您提到的IP地址。也许使用geoip,whois..etc来获得WRT区域的分布。

用户代理和系统指纹识别 - 您可以从浏览器获得大量信息,这些信息可能是唯一的,也可能不是唯一的。浏览器类型,版本,操作系统,屏幕分辨率,颜色深度,安装的字体,插件(flash,pdf,java ...等)和相关的版本号,语言,浏览器本地时间(日志客户端时钟偏差)

使用cookies,或许隐藏对您也控制的附带javascript中无辜声音域的引用。这可用于将明显的cookie的手动删除与隐藏的cookie相关联。众所周知,cookie也可以存储在用户可能拥有的其他插件的单独数据库中,例如flash播放器。删除浏览器cookie时不会删除这些内容。

使用带缓存标头的图像。用户第一次访问该站点时,会在提交输入后显示图像。如果他们已经填写了表格并再次提交,那么图像将被缓存,您可以使用缺少图像请求来假设提交的条目是作弊的结果。

答案 3 :(得分:0)

为什么不放弃两者。在用户的计算机上放一个cookie。然后,在数据库中保留一个带有ip地址的字段。这样,如果他们有不同的IP地址(由于某些互联网公司配置),cookie可以捕获它。如果人们不允许cookie,数据库字段将更安全,并且备份。但是,这些解决方案并非100%万无一失,因为如果一个人更改了IP地址并且不允许使用cookie,则可能会遇到问题。我会检查是否启用了cookie来解决这个问题。尝试设置cookie并阅读它。如果可以的话,你很高兴。否则,提示他们允许cookie。

祝你好运

答案 4 :(得分:0)

要添加其他人,您可能需要登录/注册才能投票。

答案 5 :(得分:0)

正如其他人所说,cookies很容易伪造/删除。单个用户看到的客户端IP甚至可以在中间会话中更改,并且可能有数千个用户共享相同的客户端地址。

电子邮件地址难以伪造 - 您可以在流程中添加验证阶段 - 无论如何都需要捕获其信息 - 但要跟踪每个提交源自的用户代理和客户端地址,然后验证 - 然后你可以对胜利者做出明智的决定,而不是试图检查每一次提交。

下进行。