在谷歌应用程序引擎上,我如何阻止用户上传重命名为友好文件的恶意文件


On google app engine, how do i stop users uploading malicious files renamed to something friendly?

我正在开发一款用户可以上传图像的应用程序,我一直在谷歌应用程序引擎上设置它,我认为到目前为止这太棒了。但我很难找到验证用户上传的正确图像的最佳方法,我在他们的文档中看不到任何关于它的信息,而且谷歌上的搜索结果也很少,所以我想知道我是否走错了路。

基本上,我不想存储不是图像的文件(主要是出于成本和一致性的原因以及保护我的用户),所以我需要一种有效的方法来确定这一点,我曾考虑使用云存储工具API来获取内容类型,但我想知道这是否只是基于文件扩展名,因为当我将.exe重命名为.js 时,GCS上传url给我的文件类型是"image/jpeg"

我真的觉得我错过了什么,还有人在谷歌应用程序引擎上遇到过这个问题吗?

GD扩展名可用,因此您可以对文件调用getimagesize。

如果它给了你一个有效的大小,那么假设它是一个图像,否则它就不是。

要确定文件类型,您需要一种机制来检查文件的前几个字节,这些字节通常包含幻数。幻数是确定文件类型的一种方法。看看流行文件扩展名的各种神奇数字:http://billatnapier.wordpress.com/2013/04/22/magic-numbers-in-files/

类似的问题和解决方案:

  • 对于python:如何检查python中没有扩展名的文件类型
  • 对于PHP(请参阅最后两篇文章):识别PHP中文件类型的最佳方法

使用exif_imagetype。基于文档,它比getimagesize更快。