我正在编写页面访问者统计信息。对于每次“访问”,我都会保存:
- 用户的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!!!
}
?>
最佳答案
有没有可能发生这样的事情?以前有过类似的事情吗?您无法阻止这种情况,但即使日志以 1MB/s 的速度插入,也需要 12 天才能填满 1TB 磁盘。 DDOS 会更容易和更快。只需添加更多存储空间,并添加一些任务来检查日志 DB 的大小。如果大小太大,让它向您发送警告消息,以便您可以备份并清理表格 - 或者自动生成
关于php - MySQL页面访客统计,数据库溢出保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23757142/