web-dev-qa-db-ja.com

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

少し変な操作をする必要があります。

まず、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
12
Strae

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

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

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

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

RedirectMatch 404 \.txt$
18
rkthkr

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

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

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

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

1
Dave Drager

ファイルへのアクセスを拒否するために標準のUNIXファイルのアクセス許可を使用しないのはなぜですか?

ウィキペディアに nixファイルのアクセス許可 についての適切な説明があります

0
cyberkni

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

0
Matt Simmons

Linux ACLs を使用できます。

0
Alakdae

Order ドキュメントセクションから:

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

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

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

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

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

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

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

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

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

したがって、もしbetterがない場合は、より悪いを選択する必要があります。

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

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

0
Strae