-1

我正在寻找解决静态 jpg / png 和动画 gif 文件(如果文件是 gif 但不是'不是动画,让它成为一个png)。

奖励信息:我正在 Amazon EC2 服务器上用 PHP 执行上传脚本,并将图像上传到 Amazon S3 存储桶。如果这改变了什么,请告诉。

奖励信息 2:在我解决了这个问题之后,我想在图像下方添加一个类似 DAMNLOL 的水印(如下所示:http ://www.damnlol.com/i/916d72c17e572b14a14c283b2f96f997.jpg )。

到目前为止我是如何解决这个问题的:

  1. 用户从 URL 中选择要以表单 / 上传的文件,继续使用 PHP 脚本(在用户中止时不会中止)。

  2. 该脚本获取图像,进行一些检查:最大文件大小,$_FILES['file']['type']必须是“image/gif”、“image/png”、“image/jpg”。最大/最小宽度和高度检查。如果一切正常,请继续。

    • 如果用户从他的本地计算机上载图像,则使用临时名称将图像存储在服务器上。之后,php 脚本调用http://regex.info/exif.cgi并使用 CURL 和临时 url 作为输入。
    • 或者在提交 url 的情况下,php 脚本调用http://regex.info/exif.cgi并使用 CURL 和提交的 url 作为输入。
  3. Jeffrey(Jeffrey 代表 Jeffrey 的 Exif 查看器 (regex.info/exif.cgi))给了我一个回应。如果它暗示图像确实是 PNG、JPG 或 GIF 类型,则脚本会下载文件(如果是提交的 url)或将文件(如果是上传的图像)移动到最终图像文件夹。成功!

如您所见,当您通过 URL 提交文件并且 URL 将 Jeffrey 重定向到有效图像但将我的服务器重定向到恶意代码时,该脚本很容易受到攻击。至少我是这么认为的。

在我看来,这个解决方案很慢,但相当安全。上传大约需要 2-5 秒,具体取决于文件大小。GIF 往往需要 4-10 秒。其他站点不需要那么长时间并且仍然安全。


关于如何解决问题的想法:

  • 显然,Jeffrey 每次都能找出实际的文件类型。PHP中有这样的防弹方法吗?显然,通过文件名来决定文件类型是解决这个问题的一个非常糟糕的方法。

  • 结合信息 2,我可以简单地获取提交的图像,获取宽度和高度信息,使用 (new_image_width = submit_image_width, new_image_height = submit_image_height + watermark_height) 创建一个新的空白图像,并将提交的图像与下面的水印一起存储。如果整个过程失败,则提交的图像不是 JPG / PNG / GIF 类型并且脚本中止。将水印添加到动画 GIF 时可能会有点棘手,但这显然是可能的(--> http://forgifs.com/gallery/d/206365-1/Fitness-ball-roof-jump.gif)。

你觉得我的想法怎么样?您对这个特定问题有任何详细的解决方案吗?我很早就知道它并对该主题进行了多次研究,但我从未找到“最佳”解决方案。

感谢您的时间。愿我们最终解决这个问题,并帮助我和成千上万在谷歌上日复一日地寻找这个问题的解决方案的人。

4

1 回答 1

0

我使用http://www.webmotionuk.co.uk/php-jquery-image-upload-and-crop/的修改版本 至少您可以查看代码并了解有关制作文件上传过程的一些想法有点安全。

于 2012-12-20T05:32:13.693 回答