【问题标题】:Upload folder security solutions上传文件夹安全解决方案
【发布时间】: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 访问权限!

标签: php security upload chmod


【解决方案1】:

您可以简单地将 .htaccess 文件添加到包含已上传文件的文件夹以防止执行,但我认为这是一种更好的方法来检查上传文件的 MIME 类型/文件扩展名,然后再将它们永久存储在文件系统

【讨论】:

  • 你的意思是像 .jpeg|.jpg)> order deny allow deny from all 吗?
  • 不 - 你想阻止访问完整的目录 - 所以你必须在你的 /upload 文件夹中放置一个 .htaccess 文件,内容为deny from all
  • 通过这样做,我仍然可以使用 显示页面上的图像?
  • 如果您使用 src="file.php?.." 解决方案 - 是的
  • LFI 攻击仍然存在问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 2013-10-25
  • 1970-01-01
相关资源
最近更新 更多