一部のファイルへのWebアクセスを拒否するにはどうすればよいですか?


13

ちょっと変な操作が必要です。

まず、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など)でそのファイルを読み取ることができなければなりませんが、ブラウザ(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)にあり、サブフォルダーにはない場合のみです。さらに、第2レベルのフォルダー(www.example.com/folder1/ fruit /foobar.txt)は、2 項作成されます。.htaccessファイルを時々変更する必要がないようにしたいと思います。

* www.example.com / folder-name-static / * folder-name-dinamyc / *** file-nameにある、指定された名前のすべてのファイルに適用されるようなルールを作成することが可能です。 -static.txt *、これらの部分は常に同じですが、**その1つの変更だけですか?

編集

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

回答:


19

Files / FilesMatchと正規表現を使用できます。

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

これが.htpasswdを保護する方法です。

または、.txtへのアクセスを404にリダイレクトします。

RedirectMatch 404 \.txt$

私はその方法を使用しようとしましたが、サブフォルダーのファイルでは機能しないようです
Strae

正規表現を修正しました。申し訳ありません...
rkthkr

わかりました。しかし、正規表現はRedirectMatch 404 \ myfilename.txt $のようになっているはずですよね?ファイルは常に同じ名前になりますが、フォルダは異なります。そして、このソリューションはFTPメソッドに影響しませんよね?
Strae

正解に見えます...
rkthkr 09/09/06

はい、私はそれが機能することを確認します...しかし、私の正規表現RedirectMatch 404 \ myfilename.txt $は間違っている必要があります。正規表現で。何か助けは?imは正規表現を使用したgenuisではありません;)
Strae

1

はい、これはすべて可能です。ただし、サーバーにテキストファイルにアクセスする必要があるプログラムがある場合、それらはWebルートの外に常駐する必要があります。たとえば、Webファイルが〜/ public_html /にある場合は、〜/ dataに保存する必要があります。それらをパブリックhtmlフォルダーに配置する理由はありません。

それらをWebフォルダーから削除することに加えて、UNIXの権限がそれらに正しく設定されていることを確認してください。スクリプトのユーザーには読み取り(書き込み)アクセス権が必要ですが、他の誰もがこのアクセス権を持つ必要はありません。

これらのファイルをWebでアクセス可能なフォルダーに配置する必要がある場合は、mod_rewriteを介して要求することを実行する方法があります。多くの例については、次のサイトを参照してください。その1つは、法案に適合するはずです。

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


ファイルはpythonまたはphpを介して作成されます。その後、二度と編集されることはなく、ただ読むだけです。
Strae

0

標準のUNIXファイルのアクセス許可を使用して、ファイルへのアクセスを拒否しないのはなぜですか。

UNIXファイルのアクセス許可について、ウィキペディアにきちんとした説明があります


php、python、rootユーザーがこれらのファイルを処理できるようにアクセス許可を設定し、ブラウザーにアクセスできないようにするにはどうすればよいですか?
Strae

0

.htaccessファイルをサブディレクトリとステートメントに配置し、AllowOverride Allを設定します。


したがって、すべての2°レベルのフォルダーに.htaccessが必要ですか?mmh ..が解決策になる可能性があります.. 1 .htacces ..のほうが良いでしょう
Strae


0

あなた全員を読んだ後、私は.htaccessファイルが私にとっての方法であり得ることに気づきました:それが存在するフォルダー内のファイルにのみ影響を与えます。

しかし、私のフォルダーは動的に生成されます。新しいフォルダを作成するたびに.htaccessファイルをコピーしたり再作成したりすることは、信頼できる方法ではないと思います。

デイブが言ったように、論理的な方法は、Webアクセス可能なフォルダーの外に構成テキストファイルを格納することです。

しかし、すべてのフォルダーに他のファイル、たとえば画像を保存する必要があります。これはWebアクセス可能でなければなりません...そして、Webルートディレクトリ内外でフォルダー構造を複製することも信頼できる方法だとはまだ思いません。したがって、Apacheの設定も変更して、phpの許可されたパスにconfigフォルダーを含める必要があります。これはとにかく問題にはなりません。

だから、もし私がより良いものを持っていないなら、私はより悪いものを選ばなければなりません

私は今のところ、複数の.htaccessファイルソリューションを使用して、後悔しないことを期待しています。

他のすべてのソリューションは高く評価されています。


0

以下からの注文ドキュメントのセクション:

キーワードはカンマでのみ区切ることができます。それらの間に空白は許されません。

したがって、以下は正しくありません。

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

以下は(もっと)正しいです

<Files "File.txt">
Order allow,deny
Deny from all
</Files>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.