【问题标题】:Image upload directory security图片上传目录安全
【发布时间】:2013-10-11 11:48:54
【问题描述】:

我有一个将图像上传到服务器目录的 php 脚本。但是我看到一些cmets提到出于安全考虑,不应该将图像上传到根目录。如果我上传到我当前上传到的目录,我不确定可能出现的安全漏洞。这是存储图像的路径。 htdocs/images/filenames.jpg.

请告诉我以安全方式存储图像的位置。

【问题讨论】:

  • 如果您将文件夹的 chmod 设置为 644 并将图像重命名为时间戳,您应该没问题
  • 如果chmod设置为644是否允许用户上传文件到这个目录,因为这里draac.com/chmodchart.html这个词只能读。并且当多个用户同时上传时是否会有重复的时间戳。
  • 基于有人可能上传 php 文件或其他可执行文件的假设来增加安全性。在 webroot 之外有一个上传目录可以将这些文件放在外面或到达。您可以在上传期间将目录更改为 755,然后再设置回 644。
  • 当你创建你的第一个索引页面时,webroot 是你放置文件的地方,所以你可以用http://domainname.com/index.php 调用它如果这个文件夹是你的 htdocs 文件夹,那么你应该将您的上传文件放在 htdocs 文件夹上方。基本上在您在图像上看到的位置。但是,不建议使用文件上传来淹没该位置。我会在目录树/root, so you get a folder /uploads`中创建一个目录uploads
  • 创建一个文件夹“上传”应该没问题。如果您获得了权限,它应该可以工作。仅供参考,我将整个 php 框架应用程序保留在 web 根目录之外,并且只在 webroot 内部携带一部分。如果你设置正确,你应该很好。您可能已经阅读了下面的答案。我要做的是上传图像并进行安全检查,然后再将它们移动到 webroot 并使其可供显示。

标签: php security image-uploading image-upload


【解决方案1】:

关于图片上传安全的话题很多,但首先是644应该做的目录权限。接下来,您需要注意名称,如 cmets 中所建议的,时间戳是相当好的方法,但是它必须与一些随机生成的值(或使用包括毫秒在内的时间戳)相结合,但是如果您需要给图像一个有意义的名称,您必须清理用户提供的名称,过滤掉空字节、目录遍历和其他危险字符(我会加入白名单并限制图像名称的长度,或者随机生成一个字符串)。

我更喜欢使用.htaccess 和选项php_flag engine off 来关闭目录中的任何php 执行,而不是将图像放在Web 根目录之外。此外,将图像放在 Web 根目录之外会使它们直接无法访问,因此您将无法在 <img> 标记中使用它们,除非您使用 PHP 脚本来提供图像(如果实施正确,这是一种相当安全的方法)。

最后要检查是否上传了有效图片,通常使用GD 库,特别是getimagesize,只有上传有效图片才会返回图片大小。

还要检查此topic 以了解图片上传的安全性。

【讨论】:

  • 目前我所有的图像都在网络根目录中,例如 /htdocs/images/filename.png。我使用了带有以下命令的 .htaccess 文件 AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi Options -ExecCGI 就足够了,而且我正在使用重新调整图像大小GD库并删除用户原始图像。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
  • 2013-07-09
  • 1970-01-01
  • 1970-01-01
  • 2023-01-18
  • 2020-11-08
相关资源
最近更新 更多