[英]How to not allow users(or hackers) to download a file directly from web server?
[英]Allow scripts to read a file but prevent users from viewing the file directly
假設我有一個純文本文件example.txt
並且我的網絡服務器readfile.php
上有一個 PHP 腳本。
我想要做的是阻止用戶輸入http://www.example.com/example.txt
並直接查看文本文件,但我仍然希望人們能夠加載http://www.example.com/readfile.php
從文件中讀取example.txt
並執行與它的東西(可能顯示文件的內容)。
另外,如果可以做到這一點,最好的方法是什么?
是的,這很容易做到。
有兩種主要方法可以阻止用戶訪問example.txt
。 第一個是將它放在您的 web 文件夾之外的文件夾中(通常稱為www
或public_html
),第二個是將一個.htaccess
文件與您的 example.txt 腳本一起放在文件夾中,該腳本完全阻止訪問該文件。 .htaccess
看起來像
<files "example.txt">
deny from all
</files>
但是,如果您想阻止文件夾中的所有.txt
文件,您可以將example.txt
更改為類似*.txt
的內容。
然后你可以在你的readfile.php
使用file_get_contents()
來獲取文本文件的內容,或者如果你只想輸出文件你可以使用readfile
只需將您不希望在 webroot 之外公開訪問的文件存儲起來。
/home
example.txt
/www
readfile.php
如果/home/www/
是您的公共 webroot 文件夾,則無法通過 Web 服務器訪問它上面的任何文件。 readfile.php
仍然可以很好地訪問../example.txt
的文件。
如果您需要將文件存儲在 webroot 中,請將文件放在一個文件夾中並拒絕對該文件夾的訪問。 如果您使用的是 apache,請在文件夾中創建一個 .htaccess 文件並輸入deny from all
我做過類似的事情,其中文件包含極其敏感的信息,我只希望經過驗證的用戶能夠通過 HTTPS 連接檢索文件。
我所做的是這樣的:
我將文件放在 Web 服務器(對我而言是 Apache)可以看到的范圍之外的目錄路徑中。 因此,沒有可能的 URL 會導致 Web 服務器直接提供文件。 然后我創建了一個腳本,允許用戶登錄,點擊他們想要的文件,然后 PHP 腳本讀取文件,放置適當的標題,然后將文件流式傳輸到用戶的計算機。
當然,向用戶顯示文件列表的腳本和將文件流式傳輸給用戶的腳本必須至少具有對存儲路徑中文件的讀取權限。
祝你好運!!
快速破解 - 將您的文件重命名為“.cannotReadFileWithDOT”。 服務器將關閉名稱開頭帶有點的讀取文件,但您的腳本將能夠讀取它們。 加分項是開箱即用的apache和nginx服務器配置為禁止讀取名稱開頭帶點的文件。
您可以將文件“example.txt”放在公共文件夾之外並從 readfile.php 中讀取,如$content = file_get_contents("../example.txt");
您可以像這樣調用文件,而人們看不到文件名:
<?php
$file = 'example.txt';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
?>
(來源:php.net)
這對你有用嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.