8

我正在尝试构建一项服务,任何人都可以从电子邮件地址/客户端发送图像文件并进行处理。想想这项服务有点像Flickr在通过电子邮件发送的仪表板中显示图像

从可用性的角度来看,这个机制提供了很大的优势,但我想了解这种操作的安全后果。一些问题是:

  • 我需要将所有这些文件验证为图像
  • 人们可能会发送一个带有漏洞/代码的文件,这可能是一个问题。但在我的情况下,我主要是打开一个文件并保存并让浏览器显示图像

我在这里采取了正确的方法吗?我应该承担严重的后果吗?

4

3 回答 3

7

你应该做和考虑的事情。

  1. 确保您的邮件服务器已配置为进行病毒扫描,并保持最新状态。这将是第一道防线。

  2. 当电子邮件进来时,尝试在已知的坚如磐石的库中处理图像。

  3. 请注意,许多电子邮件包含多张图片,其中一些可能与他们发送的那张完全没有关系。例如,我们公司的电子邮件都在底部包含我们的徽标。我不确定这里的解决方案是什么,但您需要考虑一下。

  4. 不同的电子邮件客户端处理图像附件的方式不同。有时它是一种正常的依恋,有时它是嵌入身体的。即使在同一个客户端中,图像的处理方式也可能不同,具体取决于他们将电子邮件作为带有附件的纯文本还是 HTML 邮件发送。

  5. 人们会测试你的系统。他们将发送 .js 文件,他们将发送标头被劫持的图像,以溢出您的图像处理库...

  6. 考虑强制执行某些电子邮件限制,例如SPF 检查

  7. 准备好接收绝对巨大的图像。今天的相机拍摄非常大的照片,很多人不知道裁剪或调整大小是什么意思。您可以考虑将每封进入服务器的电子邮件设置为 15MB 或更大的上限。然后,结合上面的#2,将图像大小自动调整到更容易接受的程度。

  8. 确定您实际要用于通知用户任何问题的机制。请记住,此机制可能会被滥用。例如,考虑发送到您的机器的垃圾邮件,其中回复标头发送给受害者。

如果您使用的是 .net,请参阅此处以了解确认文件是否为图像的可能方法:如何确定文件是否为 .NET 中的图像文件?

于 2013-03-13T21:47:56.753 回答
6

我并不是说这是 100% 安全的(你能做到 100% 安全吗?),但您可以尝试以下方法:

假设您的后缀(或任何邮件系统)上有一个别名,它将传入的电子邮件重定向到 php/bash/python 脚本以进行进一步处理。

我要做的第一件事是使用图像处理库(比如 imagemagick)并将所有传入的文件转换为 .png 格式或其他格式,并且只有在转换成功时才继续执行您的逻辑。

这样,如果有人向您发送任何恶意附件(php 漏洞利用程序、jar 文件、swf 文件等),转换将失败,因此您的系统将忽略它。

编辑:ImageMagick 具有完全符合您要求的“识别”命令。

于 2013-03-07T09:15:44.807 回答
3

电子邮件也很容易spoofed,这意味着我可以从不属于我的电子邮件地址发送电子邮件。

这也可能有帮助:在 PHP 中上传图像的安全方式...

于 2013-03-07T12:44:10.837 回答