Apache目录列出并阻止用户无需登录PHP表单即可访问文件

时间:2014-02-09 18:41:48

标签: php apache .htaccess

所以这个问题已被提出,但在其他问题中,用户希望阻止apache列出目录。基本上我有一个登录文件交换系统的网站,如果用户登录,那么他可以访问其他用户上传的内容。以下是我阻止用户访问我网站的某些部分的方法

function loggedin()
{
 if (isset($_SESSION['myusername']) || isset($_COOKIE['myusername']))
 {
        return true;
 }
else {
            return false;
     }
}

我使用此代码显示上传文件夹中的所有目录:

<?php
$dir = "./uploads";
$list = scandir($dir); /* This function sorts dirs */
$list = array_diff($list,array(".","..","index.php"));

echo "<ol>";
foreach ($list as $file)
{
   if (!is_dir($file)) echo "<li><a href='https://rye-high.ca/Rye High/$dir/$file'>$file</a></li>\n";
}
echo "</ol>";
?>

现在为了简单起见我允许apache使用Options Indexes FollowSymLinks列出目录,因为我喜欢apache如何自动执行并阻止我编写可能在php中破坏的内容。

我的问题:知道文件名/文件夹名称的用户可以直接访问文件(和目录)而无需登录系统(即mysite.ca/Rye High / uploads / ACC 100 /。我想通过仍然保持选项索引打开,以便apache可以将文件列出到实际登录的用户。

怎么做? .htaccess文件?

我考虑过编辑用于列出目录的默认apache模板代码,但是我将来可能不希望其他虚拟主机(全局)。

1 个答案:

答案 0 :(得分:0)

您可以使用apache的Basic Auth模块(http://linuxzoo.net/page/tut_authapache.html),并且您可以使用PHP生成.htpasswd文件 - http://www.htaccesstools.com/articles/create-password-for-htpasswd-file-using-php/

一个好方法是使用像php文件管理器这样的东西:

或者您可以在用户成功登录后设置Cookie,然后在htaccess中检查Cookie:https://stackoverflow.com/questions/19382160/htaccess-compare-cookie-value-and-redirect-if-evaluation-returns-true-false。 这个问题是,知道cookie值的人将能够在不首先登录的情况下浏览您的文件。