2013-04-20 48 views
0

即时通讯建立一个小型网站,允许用户上传和下载他们的个人文件从服务器。 Codeigniter被用于该项目,并使用file uploading class来上传文件。限制,只有相关的上传者可以下载他们的文件

问题是我如何确保只有上传文件的人可以下载它。目前所有的文件都上传到localhost/curious/uploads。尽管文件只对上传者可见,但如果他们共享上传链接,则任何人都可以下载该文件。

因此,如果Steve上传一个名为secure_rom.doc的文件,路径为localhost/curious/uploads/secure_rom.doc,那么任何拥有该链接的人都可以下载该文件。

怎么可能确保只有上传者可以从下载区下载而不是其他人?

+1

不知道你的情况太多了,可能是最简单的方法是有内部的子文件夹/上传,命名与用户的用户名,所以/ uploads/LiveEn只能通过LiveEn访问,并且/uploads/emma.fn2只能通过emm访问a.fn2。 – 2013-04-20 14:31:58

+0

@ emma.fn2我确实尝试过,但限制无法正常工作。所以当他们登录时只有用户可以访问该文件夹,但如果有人共享链接,他们可以直接下载ID。 – LiveEn 2013-04-20 14:39:42

+0

您是否正在进行任何检查以查看尝试连接的人是否已登录到您的网站,并且有权下载?如果没有,你应该做的是设置一个rewriterule,它将匹配/uploads/username/file.xyz,并将其传递给一个下载控制器文件,例如检查$ _SESSION ['username'],并将其与文件夹名称(将来自URL)。只要确保将文件放在可见Web目录之外,这样它们就不能直接从URL下载。这可能是为什么它不起作用。如果那有意义的话!?对不起,如果它不大声笑。 – 2013-04-20 14:42:26

回答

0

您可以使用下载脚本(尝试用笨适应)

1)检查,如果用户登录

2)设置与文件名的标题和内容类型

3)读取文件并发送给客户端!

控制器:

if($userConnected) { 
header('Content-disposition: attachment; filename=' . $file_name); 
header('Content-type: ' . $file_mime); 
$file_content = file_get_contents($file_location); 
echo $file_content; 
} 
else 
echo 'No permission !'; 

Mime content function

+0

稍作澄清。当它提示用户下载时它会显示直接链接? – LiveEn 2013-04-20 14:40:58

+0

直接链接永远不会显示,因为您可以通过服务器读取文件。用户只会看到文件的名称。 (您必须使用GET参数或其他东西来检索您的文件,例如www.ex.de。com/script.php?file = secure_rom.doc,并在你的服务器上,你做file_get_contents('/ curious/uploads /'.$_ GET ['file'])) – Pierrickouw 2013-04-20 14:49:07

+0

很好..会试试这个.. – LiveEn 2013-04-20 14:59:09

0

简单的方法

-just store the 'id' of the user when he/she uploaded something. 
- hide the URL if 'user_id' is different. 
- adding random character will have in securing. 
相关问题