MySQL页面访问者统计,数据库溢出保护

时间:2014-05-20 10:22:36

标签: php mysql statistics ip overflow

我正在撰写网页访问者统计信息。对于每个"访问",我保存:

  • 用户的md5 ip(隐私政策......)
  • 访问过的页面的ID(例如11,这是名为gallery的页面的id)
  • 日期访问时间
  • 查询(例如galery = cars& image = 18)

我不在乎许多用户可以拥有相同的IP,因为认识到每个用户仍然是不可能的,这对我来说已经足够了。


实施之后,我想到了一个可能的问题。有人可以代理他的ip,并随机查询页面。我知道,这听起来有点令人困惑和可怕,但这是可能的。在这种情况下,对于每个这样的请求,我将一行插入数据库(大小,例如128比特)。

因此,如果某人真的是恶性的,他可以循环他的请求,几天之后,我将把我的数据库填满。

问题是:如何抵御这种可能的攻击? 我知道这种情况很糟糕,但我记得我们学校的信息学挑战。而且我知道这种情况很暗,但可能。人类的想象力是未知的。


我不确定我应该在这里展示什么代码,因为我的问题始终是理论问题。也许是我的剧本的一点草图。它要复杂得多,但问题可以简化为:

<?php
    $visit = array(
        'ip' => = md5($_SERVER['REMOTE_ADDR']), // privacy policy
        'pageid' => '...', // page id number
        'query' => '...' // query part of url from address bar for example a=1&c=10
    );
    if (inDatabase('visits', $visit)) {
        echo 'Page visited';
    }
    else {
        $visit['date'] = date('Y-m-d H:i:s');
        insertToDatabase('visits', $visit); // if random IP, and random query, it inserts for every request!!!
    }
?>

1 个答案:

答案 0 :(得分:1)

是否有可能会发生类似的事情?这样的事情发生过吗?你无法防止这种情况,但即使日志插入1MB / s,也需要12天才能填充1TB磁盘。 DDOS会更容易,更快。只需添加一些存储空间,并添加一些任务来检查日志数据库的大小。如果尺寸太大,让它发送警告信息,以便您可以进行备份并清理表格 - 或自动制作