如何拒绝网络访问某些文件?

如何拒绝网络访问某些文件?

我需要做一个有点奇怪的手术。

首先,我在 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>

它似乎有效,但只有当文件位于 Web 根目录 (www.example.com / myfile.txt) 中,而不是子文件夹中时才有效。此外,第二级文件夹 (www.example.com/folder1/水果/foobar.txt) 将被动态创建。我想避免不时更改 .htaccess 文件。

可以创建一个规则,类似这样的规则,适用于具有给定名称的所有文件,该名称位于 *www.example.com/folder-name-static/*文件夹名称-dinamyc/***文件名-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

答案1

你可以使用文件/文件匹配以及正则表达式:

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

这就是 .htpasswd 的保护方式。

或者将任何对 .txt 的访问重定向到 404:

RedirectMatch 404 \.txt$

答案2

来自命令文档部分:

关键字只能用逗号分隔;它们之间不允许有空格。

因此,以下说法是错误的:

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

以下(更)正确

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

答案3

是的,这都是可能的。但是,如果您的服务器上有需要访问文本文件的程序,则它们应该位于 Web 根目录之外。例如,如果您的 Web 文件位于 ~/public_html/,则应将它们存储在 ~/data 中。没有理由将它们放在公共 html 文件夹中。

除了从 Web 文件夹中删除它们之外,还要确保正确设置了它们的 unix 权限。脚本的用户需要具有读取(写入?)访问权限,但其他任何人都不必具有此访问权限。

如果您确实需要将这些文件放在可通过 Web 访问的文件夹中,则可以通过 mod_rewrite 执行所需的操作。请参阅以下网站以获取许多示例,其中一个应该符合要求。

http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/

答案4

您可以使用Linux ACL

相关内容