簡體   English   中英

禁止在直接http上訪問文件

[英]Prevent file access on direct http

我的問題似乎與此處的其他問題類似,我嘗試了一些,但似乎不適用於我的情況...
我已經開發了一個站點,您必須在其中填寫表格,然后返回一個PDF文件,您可以下載或打印該文件,此文件已保存,以便以后檢索

public_html
      |_index.php
      |_<files>
      |    |_file_001.pdf
      |    |_file_002.pdf
      |_<asstes> ....etc

這就是我的文件和文件夾在服務器上的顯示方式,任何人都可以輕松猜出其他文件.com/folder/file_00X.pdf ,其中X可以更改為任何其他數字並可以訪問該文件...完成后用戶腳本的形式返回一個URL .com/file/file_001.pdf因此他/她可以單擊它進行下載...
一年前,我做了類似的腳本來生成PDF,但是在那種情況下,用戶需要電子郵件和通過電子郵件發送的代碼才能生成PDF,而PDF卻按需生成,但這種情況下並沒有保存。 。
有沒有辦法保護當前的文件?
或者,我是否必須增加猜測的難度?
就像是。
.com/files/HASH(MD5)(MICROTIME)/file_(MICROTIME)_001.pdf
並將文件和文件夾名稱保存在數據庫中以便通過管理面板輕松訪問,用戶將必須通過電子郵件獲取完整的網址...

任何想法將不勝感激。

為了全面安全起見,我會將PDF從公共文件夾中移出,並由腳本負責傳遞內容。 如果正確填寫了表格,則可以生成一個臨時哈希並將該哈希和pdf路徑存儲在數據庫中。 這樣,用戶將可以通過檢索器腳本以鏈接的形式訪問文件,但是您將控制他可以使用該鏈接多長時間。

想象一下臨時鏈接是http:// yourdomain / get_pdf / THIS_IS_THE_HASH

  • 將PDF移到某些非公共文件夾(您的Web服務器可以訪問,但公共文件夾不可以)。 或者,您可以使用.htaccess限制對pdf當前位置的訪問。

  • 編寫一個php腳本,該腳本根據傳入的http變量返回正確的pdf。

您可以根據需要以任何方式保護/限制這種情況。
例如,一個答案建議使用臨時哈希。

其他限制訪問的選項:

  • 在用戶會話中存儲他們提交的表單並等待下載,這樣沒人可以直接鏈接。
  • 檢查引薦來源標頭。 如果是直接請求,則不要提供文件。

這是使用最后一個選項的代碼示例:

$hash_or_other_identifier = $_REQUEST["SomeVariable"];

if (!$_SERVER["HTTP_REFERER"])
{
    //dont serve the file
} else {
    //lookup the file path using the $hash_or_other_identifier
    $pdfFile = somelogic($hash_or_other_identifier);

    //serve the correct pdf
    die(file_get_contents($pdfFile));
}

我什至不認為如果您擔心的是僅是人們在URL欄中鍵入文件名,對文件名保密就沒有什么大不了的,因為您可以簡單地檢查它是否是直接鏈接。 如果您還擔心機器人程序或聰明的人會創建指向您文件的鏈接,使它看起來像是引薦來源,那么您將需要添加更嚴格的檢查。 例如,您可以驗證引薦來源網址是您自己的網站。 當然標題可以被欺騙,所以這完全取決於它需要的防彈性能。

該網址將類似於: http://yourdomain/pdf?SomeVariable=12345

但是,您不必使用http變量。 您還可以使用具有相同結果的url片段,例如: http://yourdomain/pdf/12345

一般准則:

  • 文件不在可通過HTTP訪問的目錄中
  • 使用數據庫或任何其他存儲設備來將文件位置與標識符(自動遞增的數字,guid,哈希,以及您認為合適的任何標識符)鏈接起來。 文件的位置可以在服務器的文件系統中,也可以在共享的網絡位置等上。
  • 除了散列之外,還可以對數據庫生成的ID進行加密,對base64進行編碼並提供回去,這實際上是可行的,這使得幾乎不可能猜出為了引用文件而需要回送的有效字符串。
  • 如果用戶身份驗證通過(請使用經過身份驗證的用戶才能檢索文件),則使用PHP腳本來傳遞文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM