PHP文件上传/下载安全

标签 php security .htaccess upload download

我只是想确认我正在做的事情实际上是安全的。

首先,我有一个 GoDaddy 共享主机帐户,但我有一个专用 IP 地址。

让我们称我的服务器路径为 /path
我网站的文件位于 /path/mysite
当用户上传文件时,我将其移动到 /path/uploads/file_name
某人不可能通过 URL 访问该文件夹。
要添加,我在 /path/uploads 中有一个 .htaccess 文件,其中包含以下内容:

order deny,allow
deny from all
allow from 1.1.1.1 #let's say 1.1.1.1 is my server's IP address.

然后要真正启动文件下载,我的用户将点击链接到 mysite.com/file.php?q=[file_id]

file.php 中,我这样下载:

$mime = mime_content_type($location);
header('Content-disposition: attachment; filename='.$name);
header('Content-type: '.$mime);
readfile($location);

据我所知,任何人上传的文件都不可能在我的服务器上运行,但我可能是错的。

是否有任何我需要注意的安全漏洞?

最佳答案

首先,您不需要 allow from 1.1.1.1 因为这将允许您通过 Apache 服务访问此目录。不,您只能从正在执行的程序/脚本访问此目录。

其次,这是解决此类问题的非常标准的模板。因此,它非常值得一看并被广泛使用的软件包(如 MediaWiki)或 BB 引擎(如 phpBB)采用这种方法并反射(reflect)了他们的一些安全检查。

我的第三个建议采纳了 Marc B 提出的观点,您需要考虑对您想要允许/支持的文件名和文件类型的限制,以及其他攻击的可能性。一种方法是简单地使用文件名和升序 ID 存储文件,并将 ID/用户文件名作为映射保存在数据库表中。您还需要不仅考虑对您的服务器的攻击,还需要考虑恶意用户可以使用此上传工具来实现 XSS和其他攻击。

关于PHP文件上传/下载安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11044085/

相关文章:

.htaccess - htaccess 文件标签中的多个文件

php 通过 mysql 字段搜索字符串匹配

php - AJAX 调用的 Yii SQL 分析

facebook - 如何使用 Shiro 对基于 cookie 或 facebook 的用户进行身份验证?

.htaccess - 如何在 .htaccess 中创建虚拟文件夹

apache - 规范 URL 和 URL 重写

PHP 文件编辑器 - 解决一些错误

php - 打破 forloop 但在 switch 语句 php 中

php - 登录或返回链接 url 后确保返回上一页的最佳做法

linux - 目录的 rwx 中的 'x' 是什么意思?