一尘不染

安全文件下载

mysql

我想要一个文件夹,叫它docs,其中包含登录用户可以下载的文档。这些都有非常敏感的信息。如何最好地保护文件夹。我来自PHP背景,因此想知道是否忽略了任何内容。

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

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

我正在尝试尽可能详尽,以便任何建议,无论多么小,都将受到欢迎。


阅读 491

收藏
2020-05-17

共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;
?>
2020-05-17