16

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

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

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

我试图尽可能彻底,所以无论多么小的任何建议都会受到欢迎。

4

2 回答 2

37

将文件放在 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;
?>
于 2012-05-31T13:06:05.743 回答
0

除了 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>
于 2012-06-01T09:31:37.217 回答