我正在使用 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/