安全文件以供下载

2022-08-31 00:27:52

我想要一个文件夹,让我们称之为文档,其中包含登录用户可以下载的文档。这些具有非常敏感的信息。如何最好地保护文件夹。我来自PHP背景,所以想知道我是否忽略了什么。

我将使用.htaccess保护文件夹,并且当用户单击下载时,他们永远不会显示该文件夹。通过php删除文件夹名称强制下载到他们。

当然,为了保护用户区域,我正在对所有输入字段实施卫生和验证,并注意SQLInjections。使用 SSL 连接。已关闭所有 php 警告。安全区域使用 SESSION 变量来控制访问并重新验证用户是否执行特殊任务(如更改密码)。再加上10分钟的超时功能,之后用户必须重新输入详细信息。

我正在努力做到尽可能彻底,因此任何建议,无论多么小,都将受到欢迎。


答案 1

将文件放在 Web 根目录之外。然后使用PHP通过脚本传递文件。这样,没有人可以直接链接到文件并绕过您的控制。(当然,请确保仅在验证用户具有检索该文件的权限后才执行此操作的脚本)。

示例 PHP:

<?php
    if (!isset($_SESSION['authenticated'])) {
        exit;
    }
    $file = '/path/to/file/outside/www/secret.pdf';

    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
?>

答案 2

除了John Conde之外,您还可以将dl url重写到另一个不明智的文件夹中,以蜜罐尝试超越其访问权限的用户。

并在您的 htacces 中添加此类规则

Options -Indexes

<files .htaccess>
  order allow,deny
  deny from all
</files>

#Add all file you want to protect except the one you share...
<FilesMatch "\.(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$">
  Order Allow,Deny
  Deny from all
</FilesMatch>

推荐