上传用户提供的图像并安全存储

时间:2013-06-28 09:13:24

标签: php image-processing amazon-s3 mime-types

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

我担心的是:

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

我目前正在这样做,我假设所有图像都是JPEG。然后在PHP中,我正在执行类似imagejpeg(imagecreatefromstring(file_get_contents($from)), $tmp)的操作,这会强制它成为JPEG文件。然后,我将生成的文件作为image/jpeg上传到S3。名称自动生成,并始终以“.jpg”结尾。

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

提示?

(使用PHP,Yii,AWS)

1 个答案:

答案 0 :(得分:0)

我建议按照此链接查看正在上传的文件的“幻数”我发现http://x10hosting.com/forums/tutorials/106510-securing-your-php-file-upload-scripts.html这样更安全,因为您不依赖于文件扩展名,您需要您要允许的文件的白名单,只需启动剩余部分。

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

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

希望这有帮助!

相关问题