防止IP在服务器上多次下载文件

时间:2017-01-31 00:58:14

标签: php linux apache .htaccess

我有一个程序,用户可以通过一个发布到php页面的按钮从我的网站下载。 php将下载请求记录到我的数据库中,然后提供实际程序供他们下载。但是,我不时注意到某些IP会每半小时下载一次程序...有时会在很多天内下载数百次。不确定它是什么,假设它是一个机器人,而且IP总是在罗马尼亚或匈牙利等国家。

最初我在我的.htaccess中阻止了IP,但我不想每次都这样做。所以我在我的php中添加了代码,只允许用户每天下载特定的#次。这很好,但是,有一个人可以直接获取我的程序的直接url并以绕过php逻辑的方式下载它。

1)有办法防止这种情况吗?可以修改.htaccess以防止直接下载文件但允许我的php提供它吗?

2)我是否应该对此感到担忧?我正在使用共享服务器,所以我真的只关心带宽影响。

1 个答案:

答案 0 :(得分:1)

如果你想要的是不允许用户绕过PHP逻辑,你可以用PHP脚本渲染和输出文件。

<?php
$file = some file from query;

if (some logic matches)
    die('Download forbidden');

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
}
?>

请参阅:http://php.net/manual/en/function.readfile.php

假设您的文件存储在/files/中,将脚本放在/down.php之类的某个位置,并在.htaccess的{​​{1}}中添加以下代码。

/files/

有关此内容的更多信息,您可以看到:Deny access to one specific folder in .htaccess

此外,如果您真的关心带宽,可以增强下载禁止逻辑,如创建用户系统,或将用户IP放入数据库以管理/限制每个用户的总下载带宽。