接受图片上传时的安全问题

时间:2009-09-28 04:31:32

标签: security upload png jpeg

接受图片上传时需要考虑哪些主要安全问题,超出所有HTTP上传的正常内容?

我正在接受图片上传,然后将这些图片展示给其他用户。

例如,我应该如何验证上传的图像实际上是有效的图像文件?在观众中是否存在任何可被利用错误的图像文件攻击的已知漏洞,我应该关注这些漏洞是否会意外传递漏洞? (快速谷歌搜索似乎表明曾经有过IE5 / 6。)

我是否应该删除所有图片元数据以帮助用户阻止无意的信息泄露?或者是否有一些安全,必要或有用的东西允许?

是否存在可能存在安全漏洞的常见图像格式的神秘功能?

是否有任何图书馆处理这些问题? (和/或其他问题,如将渐进式JPEG转换为普通JPEG,下采样以标准化尺寸,优化PNG等)。

4 个答案:

答案 0 :(得分:2)

您最大的风险是攻击者试图将某种类型的可执行代码上传到您的服务器。如果上传的文件随后可在网络上浏览,则攻击者可能会使代码在您的服务器上运行。您最好的保护是首先将上传的文件保存到非公开浏览的位置,尝试将其作为图像加载到您的编程语言中,如果可以将其成功解析为图像,则允许它。很多时候人们都想要调整图像的大小,所以真正做到这一点并不是额外的工作。验证映像后,您可以将其移动到Web服务器的公共可浏览区域。

另外,请确保您对文件上传大小有限制。默认情况下,大多数平台都会有某种限制。您不希望恶意用户使用无休止的文件上载来填充磁盘。

答案 1 :(得分:2)

在图像格式化程序中传播错误的风险并不是“完全”你的问题,但无论如何,你可以通过遵循将“.jpg”映射到你的可执行语言的一般做法来提供帮助,并手动处理每个图像(这样你也可以参考检查)。

你需要小心:

  • 人们将代码上传为图片(.jpg中包含实际的c#代码)
  • 任何无效的扩展程序(您检查此内容)
  • 人们试图对你进行与路径相关的攻击

最后一个是您需要警惕的,如果您动态阅读图像(如果您遵循我的第一点建议,就会如此)。

因此,请确保您只打开相关文件夹中的代码,并且可能更重要的是,锁定执行此工作的用户。我的意思是网络服务器用户。确保它只具有从您正在使用的文件夹中读取的权限,以及其他此类合乎逻辑的内容。

摘录元数据?当然为什么不,这对你很有礼貌,但我不会为此感到疯狂。

答案 2 :(得分:2)

我最近从web security video了解到的一些事情:

  • 核选项是从一个仅提供静态内容的单独域提供所有上传的内容 - 所有功能都被禁用,并且没有任何重要内容存储在那里。
  • 考虑通过imagemagick等处理图像,以消除有趣的业务。
  • 有关您遇到的问题的示例,请查看GIFAR,这是一种将GIF和Java JAR放在同一文件中的技术。

答案 3 :(得分:0)

我所知道的一个漏洞是“WMF后门”。 WMF是“Windows图元文件” - 由Windows GDI库呈现的图形格式。这是wikipedia article

攻击者能够在用户的计算机上执行任意代码。当用户只通过浏览器查看文件时,可能会发生这种情况,包括但不限于Internet Explorer。该问题据说将于2006年修复。