如何保护公共图像上载文件夹免受操纵/直接访问

时间:2011-12-14 09:24:14

标签: php apache .htaccess file-upload

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

我正在创建一个提供照片修改服务的网站。我的每个客户都会使用我在Github上找到的jQuery / PHP上传脚本的修改版本上传他们的照片(BlueImp's File Upload脚本 - 道具BlueImp!)当每张图片上传完成后,会显示图像的缩略图在图像的文件名旁边。

上传页面根据订单号创建文件夹,并创建存储图像的缩略图子文件夹。例如,对于订单#12345:

/ uploads / 12345< - 上传图片的文件夹

/ uploads / 12345 / thumbs< - 将从

提供缩略图的文件夹

客户端不要访问其他客户的照片非常重要。我将uploads文件夹移到我的网站根目录之外,但是当图像完成上传时,缩略图没有显示,因为它们不在网站根目录中,因此链接无效。

这是我想到的解决方案:

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

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

我为这个罗嗦的问题道歉。我试着像我有限的编程知识那样简洁。提前感谢您花时间和精力来帮助解决这个问题。

3 个答案:

答案 0 :(得分:4)

双向

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

    Options -Indexes
    

    或者如果您想在LAN外 NO ENTRY

    # 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
    
  3. Reference
    One more

答案 1 :(得分:0)

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

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

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

玩得开心!

答案 2 :(得分:0)

你应该做的两件事是:

禁用目录索引。

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