我有一个程序,用户可以通过一个发布到php页面的按钮从我的网站下载。 php将下载请求记录到我的数据库中,然后提供实际程序供他们下载。但是,我不时注意到某些IP会每半小时下载一次程序...有时会在很多天内下载数百次。不确定它是什么,假设它是一个机器人,而且IP总是在罗马尼亚或匈牙利等国家。
最初我在我的.htaccess中阻止了IP,但我不想每次都这样做。所以我在我的php中添加了代码,只允许用户每天下载特定的#次。这很好,但是,有一个人可以直接获取我的程序的直接url并以绕过php逻辑的方式下载它。
1)有办法防止这种情况吗?可以修改.htaccess以防止直接下载文件但允许我的php提供它吗?
2)我是否应该对此感到担忧?我正在使用共享服务器,所以我真的只关心带宽影响。
答案 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放入数据库以管理/限制每个用户的总下载带宽。