Apache-2.2

如何拒絕對某些文件的網路訪問?

  • June 8, 2021

我需要做一個有點奇怪的操作。

首先,我在 Debian、apache2 上執行(以使用者 www-data 的身份“執行”)

所以,我有帶有 .txt 或 .ini 或任何副檔名的簡單文本文件,沒關係。

這些文件位於具有如下結構的子文件夾中:

www.example.com/folder1/car/foobar.txt www.example.com/folder1/cycle/foobar.txt www.example.com/folder1/fish/foobar.txt www.example.com/folder1/fruit/foobar.txt

因此,文件名始終相同,“層次結構”同上,只需更改文件夾的名稱:/folder-name-static/folder-name-dinamyc/file-name-static.txt

我應該做的是(我認為)相對簡單:我必須能夠通過伺服器上的程序(例如python,php)讀取該文件,但是如果我嘗試通過瀏覽器檢索文件內容(數字化url www. example.com/folder1/car/foobar.txt,或通過 cUrl 等。)我必須得到一個禁止的錯誤,或者其他什麼,但不能訪問文件

即使通過 FTP 訪問這些文件也是“隱藏的”,或者無論如何都無法下載(至少我與 ftp 根和使用者數據一起使用),這也很好

我能怎麼做?

我在網上找到了這個,放在文件.htaccess中:

<Files File.txt>
Order allow, deny
Deny from all
</ Files>

它似乎有效,但前提是文件位於網路根目錄(www.example.com / myfile.txt)中,而不是子文件夾中。此外,第二級的文件夾(www.example.com/folder1/fruit /foobar.txt)將被動態創建。我想避免不時更改.htaccess文件。

可以為所有具有給定名稱的文件創建類似的規則,該名稱位於 *www.example.com/folder-name-static/ *folder-name-dinamyc/file-name -static.txt這些部分都是一樣的,只是那一個變化

編輯

正如 Dave Drager 所說,我可以將這些文件保留在 Web 可訪問目錄之外。但是這些目錄也將包含其他文件、圖像和我的使用者使用的東西,所以我只是盡量不要有重複的文件夾系統,比如:

/var/www/vhosts/example.com/httpdocs/folder1/car/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/cycle/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/fish/[other folders and files here]

//and, then for the 'secrets' files:

/folder1/data/car/foobar.txt
/folder1/data/cycle/foobar.txt
/folder1/data/fish/foobar.txt

您可以使用Files / FilesMatch和正則表達式:

<Files ~ "\.txt$">
   Order allow,deny
   Deny from all
</Files>

這就是保護 .htpasswd 的方式。

或將 .txt 的任何訪問重定向到 404:

RedirectMatch 404 \.txt$

訂單文件部分:

關鍵字只能用逗號分隔;它們之間不允許有空格。

所以以下是不正確的:

<Files File.txt>
Order allow, deny
Deny from all
</ Files>

以下是(更多)正確的

<Files "File.txt">
Order allow,deny
Deny from all
</Files>

引用自:https://serverfault.com/questions/22577