2013-04-20 25 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.