[英]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路徑存儲在數據庫中。 這樣,用戶將可以通過檢索器腳本以鏈接的形式訪問文件,但是您將控制他可以使用該鏈接多長時間。
將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
一般准則:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.