【问题标题】:php uploading a file security issues? [duplicate]php上传文件的安全问题? [复制]
【发布时间】:2012-06-24 14:12:41
【问题描述】:

可能重复:
Security threats with uploads

我允许用户将图片上传到我们的网站。我是否认为我应该检查文件 .jpg/.jpeg/.gif 的扩展名以及 mime 类型以确保没有上传危险文件?

我还应该在上传时调整文件大小以检查它是否是实际的图像文件,而不是重命名的 exe 或类似文件?例如,如果调整大小失败,则它不是图像文件。

我还应该防范其他形式的攻击吗?

编辑:还在图像文件夹中添加一个 .htaccess 文件,因此 php 文件无法执行:

AddHandler cgi-script .php .php3 .php4 .phtml .pl .py .jsp .asp .htm .shtml .sh .cgi
Options -ExecCGI
order deny,allow
deny from all

【问题讨论】:

  • 不要依赖用户给你的任何东西;完全忽略并丢弃它们的文件名,包括扩展名。查看文件内部并确保它看起来像你想要的,如果可以的话,进一步清理它。然后生成您自己的安全文件名。为了提高安全性,请考虑将其保存在网络服务器的文档根目录之外,并且仅通过您自己的脚本传递文件。
  • 以上问题现已重新打开。

标签: php security file-upload upload


【解决方案1】:

调整图像大小听起来是个好主意。不要忘记,有些真实图片是用 php 代码上传的,只是为了在任何本地包含漏洞中使用它们。

【讨论】:

  • +1 将图像的画布数据复制到新的画布并保存是去除非图像数据和其他隐写信息的好方法。稍微调整图像大小也是破坏更多不需要的隐藏数据的好方法。
  • 不一定,非图像数据可能会触发对图像库代码本身的利用。二进制字符串方法更安全、更快捷。虽然我同意,如果不是这样,这是个好主意。
【解决方案2】:

识别文件类型的最佳方法是使用file 命令行工具或任何其他基于相同“魔术字符串”数据库原理的工具,它知道许多文件的二进制签名,并告诉你哪个是一场比赛。

这种方法的优点是它不受扩展名和 MIME 类型操作的影响,也不受用于调整文件大小的图像操作库的潜在利用(这些年来已经有一些)。

这种方法的缺点是它可能会在临界情况下失败(一般来说,验证问题不大)并且您需要能够使用这样的工具,这在许多共享主机上可能不可用提供者。从好的方面来说,这里有一个使用这种方法的 PHP 扩展:http://www.php.net/manual/en/intro.fileinfo.php

【讨论】:

  • +1 用于提及 Fileinfo 扩展(在 php 5.3 中默认启用)
【解决方案3】:

你绝对应该检查上传文件的 mime 类型,因为攻击者可以有效地上传一个名为 somethingbad.php.jpg 的文件,它会像普通的 php 脚本一样执行。

【讨论】:

  • Mime 类型由用户设置,不可信任。完全无视它。
【解决方案4】:

上传文件没有安全问题。

  1. 只要确保您只存储带有图片扩展名的上传文件
  2. 文件大小有一个上限 - 这将保护服务器免受恶意人员的攻击 发送(例如/dev/zero)给您。
  3. 提供这些文件时,请确保 MIME 类型适用于图像。

其他帖子不正确

  1. 浏览器不运行 PHP 代码
  2. 不要信任浏览器中的任何内容。只需从浏览器中获取数据作为建议。即你可以伪造 MIME 类型。

【讨论】:

    猜你喜欢
    • 2013-02-14
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 2012-04-14
    • 1970-01-01
    • 2011-04-27
    • 2020-01-12
    • 2011-06-24
    相关资源
    最近更新 更多