如何保护文件免受未经授权的下载


How to go about protecting files from unauthorized downloads

我正在使用PHP和MySQL数据库创建一个会员网站,我有办法让用户使用他们的用户名和密码登录。都是很标准的东西。

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

然而,问题是,任何能够了解文件系统的人都可以直接下载这些文件。

假设我们有一个包含视频内容的主文件夹,称为"视频",在"视频"中,我们有子文件夹,如"飞机"、"火车"answers"汽车",每个子文件夹中都有单独的文件夹(如"喷气机"、"道具"answers"飞机"的"间谍"(,每个子类别都有特定的视频。

因此,如果有人知道文件系统,只要知道文件名,他们就可以简单地键入https://www.myvideosite.com/videos/planes/jets/f15.wmv并尽情下载。(正如你所看到的,我有一个安全的连接,它在运行Linux的Apache服务器上。(

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

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

简单地说,我到底怎么能禁止那些不是会员但可能(通过任何方式(发现文件系统是什么的人下载?在我看来,这应该很简单,但遗憾的是,我没有找到一个可靠的答案。

您可以使用.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);
}

如果.htaccess 有问题,下面是一个答案

好的,如果您正在为它提供public_html,请转到它的父目录,创建一个名为"videos"的目录。(如果不在public_html中,则可能需要在路径中添加一些../(。pathinfo负责处理验证问题,如果有人试图在其中偷偷插入路径,它将只返回一个文件名。如果你把它命名为download.php,这个:

下载.php?视频=功能.mp4

将从视频目录加载一个名为fun.mp4的文件。

<?php
// do your user authentication
$video_directory = "../videos/";
$file = pathinfo($_GET["video"], PATHINFO_BASENAME);
if( $user_is_logged_in )
{
    if( file_exists( $file ) readfile( $video_directory . $file );
}
?>

USe simple.htaccess/htpasswd身份验证,摘要或基本:

http://www.askapache.com/online-tools/htpasswd-generator/