2013-07-08 265 views
0

我試圖做一個可下載的PDF文檔對用戶不可見的URL,讓他們無法從其他任何地方訪問它。我需要隱藏網頁左下角的網址(鼠標懸停時)以及瀏覽器地址欄中的網址。我需要它在所有瀏覽器上工作。隱藏下載網址

我的HTML看起來像這樣:

<a href="http://www.example.com/files/pdf/a34501.pdf">View PDF</a> 

和鏈接應該是這樣的:

View PDF

的原因是用戶必須提供一個代碼,可以下載他們的文件,但如果他們可以看到URL,他們可以輕鬆下載其他人的文檔(他們只需要更改「a34501.pdf」部分中的一個數字)。

我讀一些有關使用JavaScript函數加密的URL,或使用外部PHP文件。但是,我不知道該怎麼做。

謝謝。

+2

您的整個架構都是錯誤的。您需要每個文檔的唯一代碼,而不是鏈接隱藏。即使你隱藏了鏈接,有人可以相對容易地找出網址並下載到他們心中的內容。 – Mansfield

+0

當人們上傳時,使用salting和時間戳來創建唯一鏈接以及文件默認名稱。另外:*問題必須證明對所解決問題的最小理解。告訴我們你試圖做什麼,爲什麼它不工作,以及它應該如何工作。* –

+0

聽起來你不想直接使用鏈接,讀取服務器的代碼並輸出文件1在正確的請求下, –

回答

3

您可以使用PHP腳本提供的文件,同時還允許PHP來驗證用戶的會話信息的/ etc。

的方法是這樣的:

  1. 用戶輸入一個唯一的代碼(後需要附加的認證以驗證用戶)。
  2. 的唯一文檔鏈接產生,如:http://domain/download.php?file=58afg71057ga82157(例如)
  3. download.php驗證對存儲的會話信息的用戶請求 - 如果一切正常,它發送文件頭()和沿該文件的內容通過。

這個basic file download tutorial提供了以這種方式提供文件的基礎知識。你將需要改進這個基本的教程,但它應該讓你知道這個過程是如何工作的。

建議:

  • 採用了獨特的「鑰匙」每用戶(允許相同的用戶重新下載);或者,
  • 一次性只允許一次下載的一次性密鑰;或者,
  • 需要用戶身份驗證,讓你知道他們是否應該被「允許」使用的關鍵。
  • 不要使用「FILENAME.EXT」找到要下載的文件,無論是在會話存儲的名稱或使用存儲在數據庫中的唯一標識符。
  • 不要只是複製粘貼示例腳本,它們往往是極不安全。
+0

該鏈接引發錯誤,403 –

6

隱藏URL將擋板至少精通技術的用戶,但沒有任何人誰願意下載你的文件,並有一個很小的高科技知識,如果你需要隱藏的文件後面的代碼(或支付牆)您可以使用驗證用戶,並吐出相應的文件PHP腳本,一個小例子是這樣的:

if($validUser) 
{ 
    $path = $fileName; 
    $size = filesize($path); 
    $fp = fopen($path, "rb"); 
    $content = fread($fp, $size); 
    fclose($fp); 

    header("Content-length: ".$size); 
    header("Content-type: application/octet-stream"); 
    header("Content-disposition: attachment; filename=".$fileName.";"); 
    echo $content; 
} 
exit(); 

這裏假設你的服務器物理有文件,但如果你有,你可以修改它他們在數據庫或任何其他存儲介質中。當然,您必須先驗證用戶是否有權下載該文件,但這取決於您。