【发布时间】:2012-11-08 20:13:04
【问题描述】:
我们都知道 chmod 777 并不是让我们的上传脚本正常工作的最佳方式。所以我在想什么是使用它时最好的解决方案。
我认为当用户上传文件“picture.jpg”时,我可以将其重命名为“md5(username-picture-1.jpg)”并且在网页上显示为<img src="files.php?img=username-picture-1.jpg">。
那么这个files.php文件会是这样的
<?php
$file = md5($_GET['img']);
header('Content-Type: image/jpeg');
header('Content-Length: ' . filesize($file));
echo file_get_contents($file);
?>
这样用户就不会知道他上传的文件的文件名,也就是说,他将无法执行它。我说的对吗?
并且显然我会进行一些其他检查来处理上传,例如 mime 类型和其他内容。我只是想知道这是否会阻止用户执行他上传的文件。
【问题讨论】:
-
这是一种让弄清楚请求的文件变得烦人的方法。但是大多数代码都是开源的,所以你不能依赖默默无闻的安全性。像 Facebook 这样的人不这样做还有另一个原因。您已将您的网站转换为每页 1 次 PHP 执行到每张图像 1 次(每页 +1)。在一个流量可能是 30 倍的画廊上。无论如何,您不应该需要
chmod 777,该文件应该只能由运行网络服务器的用户(不应该是root)执行。 -
怎么可能?我没有 ssh 访问权限!