使上传的文件外部无法访问php / apache

时间:2012-08-13 10:26:56

标签: php security file authentication upload

我制作了一个允许用户上传文件(文本文档)的表单。我正在使用由time()和用户ID组合而成的唯一(?)文件名(只有已登录的用户可以上传)。

我的问题是无法从外部访问该文件。也就是说,只有上传它的用户或管理员才能看到它,而只需输入www.domain.com/uploads/file_name.txt就无法访问它

我知道我可以阻止通过htaccess访问文件,但如果我理解正确,那么即使我以管理员身份登录(或者发送文件的用户),我也无法打开它。 我知道我可以通过PHP在本地打开文件,所以我可以通过我的管理面板显示内容,但这是一个痛苦,因为我只能输出纯文本文件没有问题。我也无法下载该文件。

在某些情况下,我可以动态生成pdf或rtf版本,但这需要很长的路要走,因为我需要以复杂的方式详细说明内容。无论如何,我不知道如何处理Word或OpenOffice文件,这可能是最常见的情况,以及如何不松散格式或其他可能的功能。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

为什么不显示登录用户的下载链接,例如www.domain.com/download.php?file = ...代码可能如下所示:

if( isset($_GET['file']) && user_is_logged_in() ) {
  $file = DIR_SOME_WHERE .'/'. basename($_GET['file']);
  if( file_exists($file) && user_has_file_access( $file ) ) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
  }
}