安全文件下载
Posted
技术标签:
【中文标题】安全文件下载【英文标题】:Secure files for download 【发布时间】:2012-06-05 17:53:27 【问题描述】:我想要一个文件夹,我们称之为 docs,其中包含登录用户可以下载的文档。这些有非常敏感的信息。我怎样才能最好地保护文件夹。我来自 php 背景,所以想知道我是否忽略了什么。
我将使用 .htaccess 保护文件夹,并且当用户单击下载时,他们永远不会显示该文件夹。通过删除文件夹名称的 php 强制下载。
当然,为了保护用户区域,我正在对所有输入字段实施卫生和验证,并注意 SQLInjections。使用 SSL 连接。关闭所有 php 警告。安全区域使用 SESSION 变量来控制访问并重新验证用户的特殊任务,例如更改密码。加上 10 分钟的超时功能,之后用户必须重新输入详细信息。
我尽量做到彻底,所以无论多么小的建议都会受到欢迎。
【问题讨论】:
【参考方案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
,换句话说,删除“其他人”的权限。
我尝试了这段代码,效果很好,但它会下载到我的电脑上。如何显示这段代码中的图片?
那么超时呢?
链接图片使用:***.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>
【讨论】:
感谢您的建议。你能否再解释一下。您是建议将下载文件放在蜜罐文件夹中,然后阻止所有文件? 基本上,是的!这个想法是隐藏你的真实文件夹,并阻止所有尝试访问文件夹内部和外部的文件。以上是关于安全文件下载的主要内容,如果未能解决你的问题,请参考以下文章
windows服务器,下东西为啥老出现当前的安全设置不允许下载此文件?
pikachu靶场-Unsafe Filedownload/Fileupload不安全文件的下载和上传漏洞