【问题标题】:Form Input - Restricting to one submit per IP / Computer表单输入 - 每个 IP / 计算机只能提交一次
【发布时间】:2010-04-26 20:17:24
【问题描述】:

我正在用 php 编写一个抽奖输入表单,用户在表单中提交一些信息并将其存储在数据库中。

我想找到一种方法将此表单限制为每人一次提交。删除 cookie 或通过 IP 地址。解决这个问题的最佳方法是什么?

我正在代码点火器上构建它,如果这有什么不同的话。

【问题讨论】:

    标签: php forms codeigniter cookies ip-address


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        最简单的方法是在中奖时索要住址寄货:)

        首先,最重要的是拒绝作弊者通过任何反馈渠道来判断他们的提交是被接受还是被拒绝。如果接受的条目有轻微的延迟,请确保您添加一个带有一些抖动的虚假延迟,这样他们就无法判断他们阻止您的反作弊方法的计划是否有效,或者即使您根本没有任何反作弊方法。当作弊者认为自己不需要有创意时,检测大量提交的内容会容易得多。

        您提到的IP地址。也许使用 geoip、whois..etc 来获取 WRT 区域随时间的分布。

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

        使用 cookie,可能会在您也控制的包含的 javascript 中隐藏对无辜域名的引用。这可用于将手动删除明显 cookie 与隐藏 cookie 关联起来。鲜为人知的是,cookie 也可以存储在用户可能拥有的其他插件的单独数据库中,例如 Flash 播放器。当浏览器 cookie 被删除时,这些不会被删除。

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

        【讨论】:

          【解决方案4】:

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

          祝你好运

          【讨论】:

          • 并不是说 cookie 不好,但是任何新手抽奖骗子都会在垃圾邮件之间立即检查并删除 cookie,这几乎是书中最古老的伎俩。
          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

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

            C.

            【讨论】:

              猜你喜欢
              • 2017-05-24
              • 2015-10-13
              • 1970-01-01
              • 2013-11-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-11-05
              • 1970-01-01
              相关资源
              最近更新 更多