【问题标题】:Uploading of fake images security concerns/prevention [closed]上传假图片安全问题/预防[关闭]
【发布时间】:2016-03-21 21:56:23
【问题描述】:

我正在构建一个 PHP Web 应用程序,它包括图像上传。我读过有关防止上传假图片的信息。但是什么是假图像,它们如何被用来攻击服务器?

使用 PHP 函数 getimagesize() 并检查文件扩展名是否足以消除所有可能的图像攻击?

【问题讨论】:

  • 如果您不知道自己在问什么,最好先弄清楚。否则,您将不知道可能的答案是否真正回答了您的问题。
  • 检查文件扩展名并不会阻止任何人上传其他内容。我也从未听说过假图像。只有其中包含可执行代码的图像。它们是有效的图像 - 但您应该完全自行重新创建图像,以消除图像中的可执行代码。
  • 不行,getimagesize() 不够用,文件扩展名检查也没用。遗憾的是,我认为没有 100% 可靠的方法,因为即使是服务器端 MIME 检测也非常脆弱。
  • 感谢@CharlotteDunois,非常有帮助

标签: php image security upload getimagesize


【解决方案1】:

假图像的一个例子是有人上传了一个 PHP 文件而不是图像,然后诱使服务器执行它。有几个选项可以防止这种攻击,包括防止用户选择用于在服务器上存储图像的文件扩展名以及将上传的图像存储在文档根目录之外(在需要时使用file_get_contents 读取它们)。

【讨论】:

    【解决方案2】:

    关于什么是假图像的一个很好的解释,请阅读@Chris 解释。

    伪造图像的目的是将可执行代码放在您的服务器上,因此将用户上传的图像存储在文档根目录之外是个好主意。另一个好主意是检查文件是否真的是图像。

    可能是检查文件是否为有效图像的最快方法:

    function isValidImage($file) {
      return ( false === exif_imagetype($file) ) ? FALSE : TRUE;
    }
    

    查看http://php.net/manual/en/function.exif-imagetype.php 了解更多信息和示例。

    【讨论】:

    • 这比捕获 Imagick 异常更可靠吗? :)
    • 从未比较过这两个选项,但我可以看出exif_imagetype() 不会消耗大量内存并且速度极快。
    猜你喜欢
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    相关资源
    最近更新 更多