如果有人上传的是php文件而不是图像,则存在安全风险


security risks if someone uploads a php file instead of an image

假设我们的网络托管是linux,并且安装了php:1-当可以上传php代码而不是图像时,最糟糕的情况可能是什么。

2-入侵者能以某种方式检索我的数据库密码吗?假设存储图像的目录具有777个文件权限。

3-如果镜像目录具有644权限,该怎么办?

我的问题的答案可以与这两个问题的答案结合起来:安全性:如何验证图像文件上传?和接受图像上传时的安全问题

当上传php代码而不是图像时,最糟糕的情况可能是什么。

最糟糕的情况是:入侵者可以执行任意的PHP代码,甚至可能在服务器上执行任意代码。如果攻击者足够聪明,而系统管理员则不然,他甚至可能拥有整个服务器/子网/网络/。。。

入侵者能以某种方式检索我的数据库密码吗?假设存储图像的目录具有777个文件权限。

如果攻击者可以执行PHP代码(当然这取决于你的安全措施),他肯定可以从当前用户那里读取文件,所以答案很可能是肯定的。

如果映像目录具有644权限,该怎么办?

除非您在CGI模式下使用PHP,否则Web服务器执行脚本不需要执行位,因此仅此一点没有帮助。


当然,这些不是你应该问的问题。您应该问的问题是,如何首先防止攻击者上传可执行的PHP文件。我的答案是,你应该对照白名单检查文件扩展名,并删除其他所有内容,例如:

$pattern = "/'.(jpe?g|gif|png)$/iD";
if (!preg_match($pattern, $filename))
    die("Please don't.");

您应该确保不允许解析映像目录中的php文件,因为我假设它将向公众开放。

你可以在使用的/images/.htaccess文件中这样做

RemoveHandler .php .phtml .php3
RemoveType .php .phtml .php3

这样,如果他们试图访问domain.com/images/ackdatabase.php,它只会返回他们的代码,而不会返回文件。

但你应该先检查一下,确保它是一张图片。