2011-07-10 77 views
2

我正在用PHP寫一個web應用程序,用戶可以上傳他們自己的文件或圖像,但是如何保護這些文件不被所有者以外的人訪問。想想dropbox,保護這些文件的機制是什麼,我試圖搜索,但沒有得到任何有關這方面的信息。任何指針或任何指向教程的鏈接都將非常有用。提前致謝。保護用戶的文件被訪問,只有所有者可以訪問?

+0

在Dropbox的文件可以由管理員進行訪問,不僅由文件的所有者。 – CodesInChaos

回答

7

如果您要將數據庫中的圖像和文件存儲爲二進制blob,那麼在檢索數據庫並將其顯示出來之前,只需檢查登錄用戶的權限即可。

如果您將它們存儲爲常規文件,您需要做的是將它們存儲在您網站的文檔根目錄之上,並且它們不能在網絡上公開訪問。然後檢索一個圖像,在檢查了數據庫的正確所有權後(我們不知道你的體系結構,所以替換,但是你已經存儲了屬於誰的),PHP可以檢索這個文件並用正確的頭文件發送給瀏覽器。

例如,顯示圖像:

// Check permissions... 
// If permissions OK: 
$img = file_get_contents("/path/to/image.jpg"); 

// Send jpeg headers 
header("Content-type: image/jpeg"); 
// Dump out the image data. 
echo $img; 
exit(); 

可以,例如,保持與用戶ID匹配文件名的數據庫表來跟蹤誰擁有什麼。

+0

很徹底的解釋。謝謝,1 upvote – bingjie2680

3

做到這正好是這樣的典型方法...

  • 文件上傳
  • 將文件移動到一個目錄,它是從互聯網
  • 的ID訪問爲文件生成並存儲在數據庫中

然後,用戶使用該ID從服務器請求文件。

爲此,您將有一個腳本根據ID查詢文件的數據庫,然後檢查用戶是否有權讀取它。如果用戶有權訪問,它會讀取文件並將其輸出到用戶的瀏覽器。

例如,在PHP讀取JPEG圖像:

<?php 
header('Content-type: image/jpg'); 
readfile('/path/to/image.jpg'); 
+0

感謝您的回答,1 upvote,但邁克爾的答案更徹底。所以我接受他的。 – bingjie2680

0

使用獨特和特別的文件名,只有將其呈現給用戶disired。 您可以在PHP中設置會話,並檢查會話是否包含文件。並使用httacces tio重定向到PHP。

<? 
sessuion_start(); 
file_exists($_SESSION['specialkey']_$_GET['realfilename']){ 
include(/* include the file */); // or readfile 
//or header location, but then the rteal URL will become visible 
}else{ 
die('acces denied'); 
} 

specialkey設置在PHP頁面製作顯示頁面,對於evey文件是唯一的,從DB獲得。這是我可以用最快的方式。

你可能奧斯陸希望將文件存儲在DIR是從PHP

只有accesable

編輯 ,而不是包括你可以使用賈尼·哈蒂卡嫩方法

+0

如果在圖像中使用'include',它們將不會顯示。我不會投下來,但這不是一個好的答案。 –

相關問題