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


14

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

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

因此,文件名始终相同,即“层次结构”的同上,只需更改文件夹的名称:/folder-name-static/folder-name-dinamyc/file-name-static.txt

我应该做的是(我认为)相对简单:我必须能够通过服务器上的程序(例如python,php)读取该文件,但是如果我尝试通过浏览器(将网址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)将dinamycally创建..我想,以避免随时更改.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

Answers:


21

您可以使用Files / FilesMatch和一个正则表达式:

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

这就是.htpasswd保护的方式。

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

RedirectMatch 404 \.txt$

我尝试使用这种方式,但似乎在子文件夹中的文件中
不起作用

我修复了我的正则
表达式

好..可以工作。但是.. regexp应该类似于RedirectMatch 404 \ myfilename.txt $,对吗?这些文件将始终具有相同的名称,但位于不同的文件夹中。而且此解决方案不会影响FTP方法,对吗?
Strae 2009年

看起来很正确...
rkthkr,2009年

是的,我确认它可以工作...但是我的regexp RedirectMatch 404 \ myfilename.txt $必须是错误的..如果我使用RedirectMatch 404 \ .txt $,阻止了所有.txt文件,则它可以工作,但是如果我使用文件名,则不可以在正则表达式中。有什么帮助吗?我不是具有正则表达式的
精灵

1

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

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

如果您确实需要将这些文件放在可访问Web的文件夹中,则可以通过mod_rewrite通过多种方法来完成您要的操作。有关许多示例,请参见以下站点,其中一个应符合要求。

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


这些文件将通过python或php创建,然后再也无需编辑,只需阅读即可。
Strae 2009年

0

为什么不使用标准的UNIX文件权限来拒绝对该文件的访问?

维基百科上关于Unix文件权限的解释得体


我如何设置权限让php,python,root用户处理这些文件而浏览器无法访问?
Strae 2009年

0

将.htaccess文件放在子目录中,然后在语句中设置AllowOverride All


因此,我需要对每个2°水平文件夹都有.htaccess吗?MMH ..可以是溶液..会更好用1个.htacces ..
Strae


0

读完所有内容后,我注意到.htaccess文件可以作为我的方式:仅影响该文件夹中的文件。

但是我的文件夹是动态生成的。我不认为每次创建新文件夹时都复制.htaccess文件或重新创建它都是可靠的方法。

正如Dave所说,合乎逻辑的方式应该是将配置文本文件存储在可通过Web访问的文件夹之外。

但是在每个文件夹中,我必须存储其他文件(例如,图像),这些文件必须可以通过网络访问...而且我仍然不认为在Web根目录复制内外复制文件夹结构也是一种可靠的方法。 。因此,我什至需要更改apache配置,以将config文件夹包括在php允许的路径中。无论如何这都不是问题。

因此,如果我没有更好的选择,那么我必须选择较差的选择。

现在,我将使用多个.htaccess文件解决方案,希望以后不要后悔。

每其他解决方案表示赞赏。


0

从“ 订单文档”部分:

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

所以以下是不正确的:

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

以下是(更多)正确的

<Files "File.txt">
Order allow,deny
Deny from all
</Files>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.