4

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

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

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

假设我们有一个包含名为“videos”的视频内容的主文件夹,在“videos”中我们有诸如“planes”、“trains”和“automobiles”之类的子文件夹,每个文件夹中有单独的文件夹(例如“jets” '、'prop' 和 'spy' for 'planes')以及每个子类别的特定视频。

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

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

我还阅读了有关将我的视频文件放在站点根文件夹之外的内容,但这看起来更加令人困惑。

简而言之,我到底如何才能禁止非会员但可能(通过任何方式)发现文件系统是什么的人下载?在我看来,这应该很简单,但可惜我没有找到可靠的答案。

4

3 回答 3

4

您可以使用 .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);
}
于 2013-02-26T00:10:16.390 回答
0

如果您在使用 .htaccess 时遇到问题,这是一个答案

好的,所以如果您使用的是 public_html,请转到它的父目录创建一个目录名称“videos”。(如果不在 public_html 中,您可能需要在路径中添加一些 ../)。pathinfo 负责验证问题,如果有人试图在其中偷偷摸摸路径,它将只返回一个文件名。如果将其命名为 download.php,则:

下载.php?video=fun.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 );
}

?>
于 2013-02-26T00:39:30.737 回答
0

使用简单的 .htaccess/htpasswd 身份验证、digest 或 basic:

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

于 2013-02-26T12:39:40.727 回答