php - 如何着手保护文件免受未经授权的下载

标签 php mysql apache download

我正在使用 PHP 和 MySQL 数据库创建一个成员(member)站点,我可以让用户使用他们的用户名和密码登录。所有非常标准的东西。

我什至安装了允许注册用户下载示例视频文件的系统。这也很管用。

然而,问题在于,任何能够弄清楚文件系统的人都可以直接下载这些文件。

假设我们有一个主文件夹,其中包含名为“视频”的视频内容,在“视频”中我们有子文件夹,例如“飞机”、“火车”和“汽车”,每个子文件夹中都有单独的文件夹(例如作为“飞机”的“喷气式飞机”、“ Prop ”和“ spy ”)以及每个子类别的特定视频。

因此,如果有人知道文件系统,他们可以简单地键入 https://www.myvideosite.com/videos/planes/jets/f15.wmv 并下载他们想要的内容,前提是他们知道文件名。 (如您所见,我有一个安全连接,它位于运行 Linux 的 Apache 服务器上。)

这是一个主要的安全漏洞,我想在它被发现之前将其堵上。我已经研究过 .htaccess 的东西,但我在这方面的努力经常导致整个“视频”文件夹无法访问(我承认,我对这一切都是新手!)。

我也读过有关将我的视频文件放在站点根文件夹之外的信息,但这看起来更令人困惑。

简单地说,我究竟如何禁止非成员(member)但可能发现(通过任何方式)文件系统是什么的人下载?在我看来,这应该很简单,但遗憾的是,我找不到可靠的答案。

最佳答案

您可以使用 .htaccess 文件保护您的视频文件夹,并通过 php 脚本“路由”所有请求:

RewriteEngine on
RewriteRule (.*) index.php?file_id=$1 [L]

并在index.php中做认证

session_start();
// get filename from database or somewhere else
$filename = getFilename($_GET["file_id"]);

if ($_SESSION["is_logged_in"]) {
    readfile($filename);
}

关于php - 如何着手保护文件免受未经授权的下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15078973/

相关文章:

PHP : Combinations without permutations

php - .href.replace 给我双域 (http ://localhosthttp://mydomain. com)

php - 如何管理团队在其他表的字段 id_team 中更新 ID、用户名

php - 所有单元格的背景颜色都是相同的

apache - 使用子域名创建一个 Apache SetEnv 变量(以防出现通配符)

php - 与 Apache/PHP/Javascript 的长期连接(异步服务器推送)?

php - Codeigniter 2联接一对多查询3个表

php - 如何查看 ID 是否已预订特定日期?

mysql - 如何在 MySQL 中强制存储具有特定格式的数字(必须以除 0 以外的任何单个整数开头并且恰好是特定长度)?

apache - must-revalidate cache-control header 是否告诉浏览器仅在缓存文件发生更改时才下载它?