【问题标题】:How to protect a public image upload folder from manipulation/direct access如何保护公共图像上传文件夹免受操纵/直接访问
【发布时间】:2011-12-14 09:24:14
【问题描述】:

我已经找到了这个问题的几个答案,但每个案例都与我的不同。在我花几个小时实施我认为可行的方法之前,我想得到一两个意见。谁知道呢,可能有一个更简单的解决方案也会让其他人受益!

我正在创建一个提供照片修改服务的网站。我的每个客户都将使用我在 Github (BlueImp's File Upload script-props BlueImp!) 上找到的 jQuery/PHP 上传脚本的修改版本上传他们的照片。图片的文件名。

上传页面会根据订单编号创建一个文件夹,以及一个缩略图子文件夹来存储图像。例如,对于订单号 12345:

/uploads/12345

/uploads/12345/thumbs

客户不要访问其他客户的照片,这一点很重要。我将上传文件夹移到了我的网站根目录之外,但是当图像完成上传时,缩略图没有显示,因为它们不在网站根目录中,所以链接不起作用。

这是我想到的一个解决方案:

分离文件夹。将主上传文件夹移到文档根目录之外,但将缩略图文件夹保留在文档根目录中,以便在每次上传完成时提供缩略图。用户上传完图片后,删除与该订单号对应的缩略图文件夹。

有没有更好的方法呢?我担心的是阻止访问照片(客户只需上传一次,然后等待我们完成修改。他们不必重新登录即可下载它们。)我不希望有人能够通过地址栏或其他任何地方访问上传文件夹。我可以使用 .htaccess 文件来限制访问,但仍允许通过上传脚本链接到缩略图?

对于这个冗长的问题,我深表歉意。在我有限的编程知识允许的范围内,我尽量做到简洁。提前感谢您为此付出的时间和精力。

【问题讨论】:

    标签: php apache .htaccess file-upload


    【解决方案1】:

    两种方式

    1. 在每个目录上写一个空白index.html,将禁止访问文件。
    2. .htaccess中写下(如果不存在则创建这个文件)

      Options -Indexes
      

      或者,如果您希望局域网外禁止进入

      # no nasty crackers in here!
      order deny,allow
      deny from all
      allow from 192.168.0.0/24
      # this would do the same thing..
      #allow from 192.168.0.0 to 192.168.0.24
      

    Reference
    One more

    【讨论】:

    • 谢谢,这太棒了!你知道如何在 web.config 上转换它
    【解决方案2】:

    您想向每位业主客户展示拇指,而不是向其他人展示? 知道订单号(是 sequenziell),您可以轻松尝试一些链接并查看一些照片。

    我建议使用 .htaccess 来为上传文件夹设置密码,并为您必须将其归因于订单号的每个拇指生成一个哈希号。

    第二种解决方案:使用 .ht 访问上传文件夹的密码,并在生成订单确认页面时生成一个拇指,而不保存拇指。 (正如你所说,他只需要看一次)。

    玩得开心!

    【讨论】:

    • 感谢 Nicolas 的快速回复!对此,我真的非常感激!不幸的是,如果他们不能一次完成所有操作,他们可能必须重新登录才能完成上传照片。如果他们确实必须重新登录,他们将需要查看之前上传的图片的缩略图。
    • 我非常喜欢散列文件夹名称的想法。我上面提到过,我不使用 Order # 作为文件夹名称,而是使用文件夹名称 sha1(SALT.$OrderNumber) 怎么样?如果有恶意的人猜不出文件夹名称,我应该很好,对吧?再次感谢!!
    • 你必须散列拇指的文件名...安静更容易!但是您必须将其插入数据库才能在订单号和拇指名称之间建立关系。
    【解决方案3】:

    你应该做的两件事是:

    禁用目录索引。

    始终保持文件名随机。使用数据库映射它们。即 file1.jpg->file_af324234324324ff 。您还可以将缩略图文件信息存储在同一个表中。

    【讨论】:

    • 漂亮,我不知道为什么我以前没想过这样做。我只使用 sha1(SALT.$OrderNumber) 的文件夹名称,而不是使用 Order # 作为文件夹名称,怎么样?如果没有人知道文件夹名称(上传文件的人除外),我就没有什么可担心的……对吗?
    • 您可以这样做,但是如果有人发现您使用的盐,他们可以访问您的所有文件,而不仅仅是一个文件,因为它是从数据库映射的随机名称。
    猜你喜欢
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2011-06-07
    • 2020-09-06
    • 2012-05-21
    • 1970-01-01
    相关资源
    最近更新 更多