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

时间:2012-08-20 22:33:58

标签: php security image-uploading

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

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

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

我的问题的答案可以与给出这两个问题的答案结合起来:Security: How to validate image file uploads?Security issues in accepting image uploads

2 个答案:

答案 0 :(得分:3)

  

当可以上传php代码而不是图像时,可能发生的最坏情况。

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

  

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

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

  

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

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


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

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

答案 1 :(得分:2)

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

您可以使用

在/images/.htaccess文件中执行此操作
RemoveHandler .php .phtml .php3
RemoveType .php .phtml .php3

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

但是你应该检查以确保它'首先是一个图像。