【问题标题】:PHP - Block IPs for 24 hoursPHP - 阻止 IP 24 小时
【发布时间】:2012-01-19 00:44:18
【问题描述】:

我有一个 PHP 文件,我想收集人们的 IP,然后如果他们的 IP 在过去 24 小时内运行该文件,则阻止 PHP 文件继续运行。我尝试过使用 cookie,但它一直给我“无法更改标题”错误。另外,人们可以清除他们的 cookie。基本上,它会保留运行 php 文件的每个人的 IP,然后如果他们尝试在 24 小时内访问它,它会“回显“您可以在 24 小时内再次访问它”并且不会运行整个文件。然后他们可以24 小时后再做一次。

【问题讨论】:

  • 这会给路由器或 NAT 后面的用户带来问题。基本上,学校或公司网络中的任何人都会受到这种策略的阻碍,因为在您看来,所有这些都来自同一个公共 IP 地址。
  • 您需要将此信息保存在服务器上的某个位置,例如数据库。
  • IP 限制并不比 cookie 更安全,因为人们可以通过代理进行连接
  • 另一种方法是禁止任何没有 cookie 的用户访问您的服务器(24 小时)。请注意,cookie 参数中的缺陷是用户可以打开另一个浏览器来绕过该保护。为什么不让人们登录以便知道他们是谁?

标签: php ip


【解决方案1】:

每次查看页面时,在删除超过 24 小时的条目后检查 ip 地址是否在数据库表中

// Purge records
mysql_query("DELETE FROM ip_table WHERE access_date < DATE_SUB(CURDATE(), INTERVAL 24 HOUR)");

$ip = $_SERVER['REMOTE_ADDR'];
$result = mysql_query("SELECT ip FROM ip_table WHERE ip = '$ip'");
if($result){
  die("You can access this again in 24 hours");
} 
else {
  $result = mysql_query("INSERT INTO ip_table (ip, access_date) VALUES ('$ip', NOW())");
}

但是,这将阻止所有使用共享连接的用户。最好要求登录,然后阻止每个用户访问。

【讨论】:

  • 它没有给我任何错误,但它没有更新数据库
  • 好的,我让它更新到数据库,但是 if($result) 不起作用。即使我的 IP 在数据库中,它仍然可以执行
【解决方案2】:

我认为你有一个表会更容易存储每个 ip 的最后访问时间,其结构如下:

Access

 - id          - int
 - ip_addr     - int
 - last_access - datetime

您将$_SERVER['SERVER_ADDR'] 中的 IP 地址转换为带有inet_pton() 的整数值,然后在该数据库表中进行简单的选择

【讨论】:

    【解决方案3】:

    我可能经常看到的工作方法:

    IP 封禁

    优点:

    • 将阻止具有该 IP 地址的所有浏览器
    • 相当容易设置

    缺点:

    • 对于 NAT 等背后的人来说,可能会出现大量误报。
    • 用户可以移动到另一台计算机或以其他方式更改 IP(代理)

    Cookies

    优点:

    • 您拥有所报告浏览器的身份
    • 易于设置和部署

    缺点:

    • 很容易打败(删除cookie)

    用户登录

    优点:

    • 您知道正在下载哪个帐户以及何时下载
    • 很难通过帐户规避

    缺点:

    • 如果新帐户易于设置,则可以轻松绕过

    请注意,$_SERVER 是保存 IP 地址和其他有关请求标头的信息。

    【讨论】:

      【解决方案4】:

      您可以简单地使用他们访问 php 文件的日期来跟踪 ip,如果他们尝试重新访问,则在 24 小时后更新此日期。

      我希望这会有所帮助。

      【讨论】:

        【解决方案5】:

        类似这样的:

        $_SESSION['REMOTE_ADDR'] can be stored in a database, compared against
        err s/SESSION/SERVER
        (rewriting session crap over here, have session on the brain)
        

        更新:-

        有用的链接

        http://perishablepress.com/press/2007/07/03/how-to-block-ip-addresses-with-php/

        http://forums.digitalpoint.com/showthread.php?t=67344

        【讨论】:

          猜你喜欢
          • 2018-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-04
          • 2011-09-14
          • 2010-11-04
          • 1970-01-01
          相关资源
          最近更新 更多