【问题标题】:Restrict number of requests from an IP限制来自 IP 的请求数
【发布时间】:2011-09-24 17:05:44
【问题描述】:

我正在编写一个应用程序,其中要求限制用户可以从单个 IP 地址进行的登录次数(作为阻止垃圾邮件的一种方式)。 由于某种原因,我们不能使用验证码!

我能想到的唯一实现这项工作的两种方法是将来自每个 IP 的请求数存储在数据库中。 或者 存储具有相关信息的跟踪 cookie。

现在,第一种模式的缺点是数据库流量过多 - 该应用程序将被大量人使用。 将此信息存储为 cookie 的缺点是用户可以清除它们并重新开始。

如果有办法处理高数据库流量和基于 cookie 的跟踪的松散结合,我需要建议。

【问题讨论】:

  • 好的..所以刚刚发生了一个小mod。

标签: database web-applications cookies


【解决方案1】:

您正在谈论“登录”和网络应用程序,因此您有某种会话持续存在somwhere。创建这些会话时,您需要跟踪每个 IP 的活动会话数,并且在达到该阈值时不分配新会话。

如果没有关于您的框架/环境的更具体信息,这就是任何人都可以提供的最佳答案。

还要注意,由于 NAT(网络地址转换),这种方法在很多方面都失败了。例如,我们的办公室正好有一个供 X 百人使用的公共 IP 地址。内部网络位于私有 IP 空间。

【讨论】:

  • 是的。我想你提出了一个关于 NAT 的好观点。看它不是存在多少连续会话。它是需要限制的任何特定 IP 的会话总数。
  • 这就是我所说的。 * 跟踪每个 IP 的活动会话数 *
【解决方案2】:

如果你想获取 IP 并存储在某个地方,你可以使用$_SERVER['REMOTE_ADDR'] 来获取用户的 IP,在你的数据库中创建一个类似“ip”的字段,然后在你的 SQL 中进行查询以检查是否使用了 IP。 还有其他的追踪方式,比如Flash Cookie,一般人不知道它的存在,所以大部分人都不知道怎么清除。

【讨论】:

  • 嗯,这是一个选项,因为有些人在共享互联网上使用相同的 IP,所以你必须找到新的选项。像 Flash Cookies,虽然我同意你的看法。
  • Brian 提出了一个非常好的观点。如果存在这样一种情况,即公司拥有一组静态 IP 地址并且其网络中存在 NAT - 此 IP 地址记录肯定会失败。知道 Google 是如何使用 Gmail 和其他产品的吗?他们肯定会记录您的 IP 并丢弃 cookie.. 但有没有其他方法可以确保事情发生?
猜你喜欢
  • 1970-01-01
  • 2012-12-31
  • 2018-04-07
  • 2016-11-18
  • 1970-01-01
  • 2021-02-20
  • 2012-09-15
  • 2012-07-14
  • 2018-07-02
相关资源
最近更新 更多