2

在我的应用程序的不同部分,我允许用户上传图像文件(将存储在 AWS S3 中)以便稍后在站点上显示。通常,个人资料图片和徽标。

我的担忧是:

  • 安全。它真的是一个图像文件吗?用户是否试图上传恶意文件?
  • 质量。
  • 文件类型。有些图像比 JPEG 更好,有些比 PNG 更好。上传者可能最清楚,因为这是他的文件。
  • 文件扩展名。我假设当扩展名与文件类型匹配时浏览器会喜欢它。将 PNG 隐藏在“.jpg”中可能是个坏主意?

我目前的做法是,我假设所有图像都是 JPEG。然后在 PHP 中我正在做类似的事情imagejpeg(imagecreatefromstring(file_get_contents($from)), $tmp),这迫使它成为一个 JPEG 文件。然后我将生成的文件作为image/jpeg. 该名称是自动生成的,并且总是以“.jpg”结尾。

我相信这会照顾“安全性”,因为文件会重新生成为 JPEG(但也许我错了?)。但它绝对不能处理用户想要上传 PNG 文件的情况。

提示?

(使用 PHP、Yii、AWS)

4

1 回答 1

0

我建议根据我找到的链接查看正在上传的文件的“神奇数字” http://x10hosting.com/forums/tutorials/106510-securing-your-php-file-upload-scripts.html这是由于您不依赖文件扩展名,因此更安全,您需要创建要允许的文件的白名单,然后启动其余文件。

将上传的图像转换为正确的格式而不是将它们隐藏在另一个文件扩展名中会更有意义,屏蔽原始扩展名可能适用于大多数浏览器,但您肯定会遇到问题。我建议为此使用任一 imagemagick。

最后 - 您可能需要查看 PHPmove_uploaded_file函数以确保上传的文件有效http://php.net/manual/en/function.move-uploaded-file.php

希望这可以帮助!

于 2013-07-02T06:18:23.673 回答