【问题标题】:security risks if someone uploads a php file instead of an image如果有人上传 php 文件而不是图像,则存在安全风险
【发布时间】:2012-08-16 06:50:24
【问题描述】:

假设我们的虚拟主机是 linux 并且安装了 php: 1- 当可以上传 php 代码而不是图像时,可能会发生最糟糕的情况。

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

3- 如果图片目录有644权限怎么办?

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

【问题讨论】:

  • 您如何提供文件?你给他们起什么名字?
  • 是什么意思?你的意思是文件扩展名?
  • 我的意思是:上传后文件的名称(名称和扩展名部分)是什么?您如何提供文件:通过脚本还是通过网络服务器?

标签: php security image-uploading


【解决方案1】:

当可以上传 php 代码而不是图片时,可能会发生什么最糟糕的情况。

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

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

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

如果图片目录有644权限怎么办?

除非您在 CGI 模式下使用 PHP,否则执行位不应该是网络服务器执行脚本所必需的,因此仅此一项没有帮助。


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

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

【讨论】:

    【解决方案2】:

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

    您可以在 /images/.htaccess 文件中使用

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多