【发布时间】:2011-09-06 08:36:59
【问题描述】:
我开发了一个 php 脚本来替换当前的脚本,这将对不同的市场/国家有很大的影响。 其他脚本之间的这个脚本提供了照片上传功能。
在阅读了大量有关该问题的信息后,我采用了下面描述的方法。 我非常感谢您的 cmets 的安全性。
- 照片已上传到 Web 根目录外的私人 777 文件夹中。
- 已执行白名单扩展检查(仅允许 jpg、gif、png),其他所有内容都将被删除。
- 使用 getimagesize 检查最小-最大尺寸和照片有效性。
- 检查 mimetype 和文件扩展名匹配。
- 将上传的照片调整为标准尺寸(使用 imagecopyresampled)。
- 将创建的文件另存为 jpg。
- 删除原始文件。
- 使用新的(非随机名称)保存照片,即 img51244.jpg。
- 根据不可预测的算法将新照片移动到公用文件夹的可变子目录(777 权限)。即,
img10000.jpg将存储在photos/a/f/0/img10000.jpg,而img10001.jpg将存储在photos/0/9/3/img10001.jpg。这样做是出于其他原因(将子域用于静态内容服务或使用 CDN)。
脚本将在 linux 专用服务器上运行。
【问题讨论】:
-
这里什么都没有。除了文件夹的 777 权限外 - 据我了解,如果它具有 777 权限,则它不是私有的。但据我所知,这只有在您的服务器被入侵时才真正重要(至少通过这个脚本我看起来不太可能)
-
777 听起来并不安全。可能与stackoverflow.com/questions/3644138/…有关
-
对我来说听起来很不错,除了可能非常宽松的权限。也许他们可以有所限制?否则,这会做我能想到的一切,包括删除 EXIF 数据
-
我将上传文件夹称为“私有”,与公共相反(在网络根文件夹下)
标签: php security file-upload