我正在用php编写一个抽奖项目表单,用户在表单中提交一些信息,并将其存储在数据库中。
我想要找到一种方法来限制这个表格,每个人只提交一次。丢弃cookie或通过IP地址。实现这一目标的最佳方式是什么?
我把它构建在代码触发器上,如果有什么不同的话。
发布于 2010-04-27 04:23:57
简单地回答,将IP记录在与信息存储相同的行中。如果你做一个cookie,机器人或用户可以很容易地删除cookie,破坏你的保护方案。因此,只需记录IP地址,然后在接受提交之前查询每个条目的唯一性。
发布于 2010-04-27 04:25:36
他们都有自己的缺点。Cookie很容易伪造,也很容易移除,这将允许多次投票。通过IP进行限制更好,但IP地址可以在网络中共享,也可以通过代理来避免检测。最好的办法是依靠像电子邮件地址这样的东西,并迫使用户点击一个电子邮件链接来确认投票,尽管这并不是很好。
发布于 2010-04-27 08:17:48
有几种方法可以用来减轻偶然作弊的影响。在我看来,在没有更正式的验证过程(cc authorization..etc)的情况下,您不应该期望能够阻止一个坚定的作弊者。
最简单的方法是,当他们中奖时,询问他们的住址以发送货物:)
首先,也是最重要的,拒绝任何反馈渠道,以便能够告诉他们的提交是被接受还是被拒绝。如果被接受的条目有一个轻微的延迟,请确保您添加了一个带有一些抖动的假延迟,这样他们就无法知道他们用来阻挠您的反作弊方法的方案是否有效,或者您是否有任何反作弊方法。当作弊的人觉得他们不需要创造性的时候,检测他们的批量提交要容易得多。
您提到的IP地址。也许可以使用geoip,whois..etc来获得时间WRT区域的分布。
用户代理和系统指纹识别-您可以从浏览器获得大量信息,这些信息可能是唯一的,也可能不是唯一的。浏览器类型、版本、操作系统、屏幕分辨率、颜色深度、安装的字体、插件(flash、pdf、java...etc)以及相关的版本号、语言、浏览器本地时间(日志客户端时钟偏差)
使用cookie,可能会在您也控制的包含的javascript中隐藏对一个无害的听起来像是域名的引用。这可以用于将明显的cookie的手动删除与隐藏的cookie相关联。鲜为人知的是,cookie也可以存储在用户可能拥有的其他插件的单独数据库中,例如flash player。删除浏览器cookies时,不会删除这些cookie。
使用带有缓存头的图像。用户第一次访问网站时,会在提交他们的条目后显示一个图像。如果他们已经填写了表单并再次提交,图像将被缓存,您可以使用图像请求的缺失来假设提交的条目是作弊的结果。
https://stackoverflow.com/questions/2716558
复制相似问题