【发布时间】:2012-09-18 01:47:11
【问题描述】:
我一直在研究如何安全地上传图片,并且很明显,实际提供图片是最有风险的地方,因为恶意 PHP 文件可能会危及服务器。
许多人建议使用图像处理脚本,例如 getimage.php?i=575748,它会在数据库 575748 中查找并实际返回 myphoto.jpg(用户不知道原始图像的位置)更安全。
能否指出我应该在脚本中实现什么样的事情的正确方向?我知道设置内容类型标头是必须的,但这足以阻止代码执行吗?
谢谢!
【问题讨论】:
-
为什么您服务器上的图像甚至可以执行? IE 为什么 PHP 用户(没有人或 apache 最有可能)对带有图像扩展名的文件具有可执行权限?
-
目前它们不是,但是我想消除用户能够将文件扩展名更改为 say.php 然后执行它的风险。我认为通过脚本传递图像,他们无法知道文件存储在哪里,因此直接访问它会变得更加困难?
-
如果您担心不良图像进入系统,请在图像存储之前对图像运行getimagesize。如果文件实际上不是图像,这将返回 false。
-
@anjunatl 一个问题是文件可以同时是图像和另一种格式。例如,有一个臭名昭著的 gif 同时是一个罐子。