2013-07-25 130 views
0

我正在建立文件共享網站,我想問一個關於安全性的問題。 我的系統像這些網站一樣工作:FileFlyer,ShareFlareLetItBit文件共享網站的PHP安全

當用戶想要下載文件時,他需要購買密碼,然後他可以「解鎖」文件並下載它。

問題:之後,一個用戶購買密碼並解鎖文件,他可以與所有人共享下載鏈接。

我的解決方案:當用戶解鎖文件時,我會將他的IP,他的密碼和文件ID插入到SQL表中。下載鏈接將是一個2個GET的PHP文件。一個 - 文件ID,兩個 - 密碼。在文件中,我將檢查用戶的IP是否在表中,以及GET密碼是否與DB密碼相同。只有這樣,我纔會放入一個readfile函數,並開始下載。

我的問題:這是否足夠安全?不是。如果不是 - 爲什麼?還有一件事 - 我將如何拒絕對文件路徑的訪問。例如,如果文件路徑是www.SITE.com/files/file.rar,所以我不希望用戶能夠從那裏獲取文件。

非常感謝,很遺憾我的英語不好

回答

0

根據您的意見,如果你不允許通過httpd.conf文件目錄的訪問,這將避免直接的文件路徑訪問後會第一人下載和解決您的問題,即複製靜態url並嘗試再次下載它不會發生,因爲目錄訪問已被拒絕

+0

沒有爲密碼的限制。您無法每天下載超過x GB的密碼。所以我不擔心這一點。 – HtmHell

+0

我的問題是,如果有任何方式,用戶可以共享後,他打開它的下載鏈接,然後其他用戶可以下載它沒有密碼 – HtmHell

+0

而關於你的答案,如果用戶下載與下載管理器像IDM,或jDownloader ,他將無法暫停下載並在以後繼續下載。 – HtmHell

0

您可以將文件移動到文檔根目錄之外,然後當用戶想要下載文件時,通過PHP將文件閱讀功能。這聽起來合理嗎?

事情是這樣的:

<?php 
// Remember to have path outside document root: 
$filename = "/path/to/file"; 
header("Content-Disposition: atachment; filename=".$filename); 
header("Content-Type: application/octet-stream"); 
header("Content-Length: ".filesize($filename)); 
header("Pragma: no-cache"); 
header("Expires: 0"); 
$fp=fopen($filename,"r"); 
print fread($fp,filesize($filename)); 
fclose($fp); 
exit();