安全的文件下载
我想有一个文件夹,让我们称之为文档,其中包含login用户可以下载的文件。 这些信息非常敏感。 我怎样才能最好的安全的文件夹。 我来自PHP背景,所以想知道我是否忽略了任何东西。
我将使用.htaccess保护文件夹,当用户单击下载时,他们也不会显示该文件夹。 下载是通过强制通过php删除文件夹名称。
当然,为了确保用户的安全,我正在对所有input字段进行卫生和validation,同时注意SQL注入。 使用SSL连接。 closures所有的PHP警告。 安全区域使用SESSIONvariables来控制访问并重新validation用户的特殊任务,如更改密码。 加上10分钟的超时function,之后用户必须重新input详细信息。
我想尽可能地做到尽善尽美,所以无论多小的build议都会受到欢迎。
把文件放在webroot之外。 然后使用PHP通过脚本传递文件。 这样,没有人可以直接链接到文件并绕过你的控制。 (自然确保只有在validation用户有权检索该文件后才能执行此操作的脚本)。
示例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; ?>
除了John Conde之外,您还可以将dl url重写为其他不明智的文件夹,以便将尝试超越其访问权限的用户蜜jar。
并在你的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>