【问题标题】:Secure files for download安全文件下载
【发布时间】:2012-06-05 17:53:27
【问题描述】:

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

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

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

我尽量做到彻底,所以无论多么小的建议都会受到欢迎。

【问题讨论】:

    标签: php mysql .htaccess


    【解决方案1】:

    将文件放在 webroot 之外。然后使用 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;
    ?>
    

    【讨论】:

    • 作为将文件放在 Web 根目录之外的替代方法,您可能还会发现一些文件权限组合允许 PHP 读取文件,但不允许 Apache 将其提供给全世界,如chmod o-rwx,换句话说,删除“其他人”的权限。
    • 我尝试了这段代码,效果很好,但它会下载到我的电脑上。如何显示这段代码中的图片?
    • 那么超时呢?
    • 链接图片使​​用:stackoverflow.com/questions/258365/…
    【解决方案2】:

    除了 John Conde,您还可以将 dl url 重写到其他不合理的文件夹中,以蜜罐试图越过其访问权限的用户。

    并在你的 htaccess 中添加这种规则

    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>
    

    【讨论】:

    • 感谢您的建议。你能否再解释一下。您是建议将下载文件放在蜜罐文件夹中,然后阻止所有文件?
    • 基本上,是的!这个想法是隐藏你的真实文件夹,并阻止所有尝试访问文件夹内部和外部的文件。
    猜你喜欢
    • 1970-01-01
    • 2012-11-11
    • 2018-08-16
    • 2012-06-18
    • 2013-11-14
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多