.htaccess内のファイルへのアクセスを拒否する方法


112

次の.htaccessファイルがあります。

RewriteEngine On
RewriteBase /

# Protect the htaccess file
<Files .htaccess>
Order Allow,Deny
Deny from all
</Files>

# Protect log.txt
<Files ./inscription/log.txt>
Order Allow,Deny
Deny from all
</Files>

# Disable directory browsing
Options All -Indexes

次のファイルへのアクセスを訪問者に禁止しようとしています。

domain.com/inscription/log.txt

しかし、上記のものは機能しません。ブラウザからリモートでファイルにアクセスできます。

回答:


187

htaccessファイル内では、<Files>ディレクティブのスコープはそのディレクトリにのみ適用されます(サブディレクトリのhtaccessのルール/ディレクティブが親からのルール/ディレクティブに優先して適用されるときの混乱を避けるために推測します)。

だからあなたは持つことができます:

<Files "log.txt">  
  Order Allow,Deny
  Deny from all
</Files>

Apache 2.4以降の場合、次のように使用します。

<Files "log.txt">  
  Require all denied
</Files>

inscriptionディレクトリのhtaccessファイル。または、mod_rewriteを使用して、htaccessファイルおよびlog.txtへのアクセスを拒否する両方のケースを処理することができます。

RewriteRule /?\.htaccess$ - [F,L]

RewriteRule ^/?inscription/log\.txt$ - [F,L]

IISを使用している場合は、代わりにweb.configファイルでこれを行います。
Shaun Luttin、2014年

1
書き換えルールを使用すると、自分のコードが* .txtの内容にアクセスできなくなります。これをどうやって回避しますか?
パンツ

8
<Files>ディレクティブの範囲は、そのディレクトリにのみ適用されます」-そうではありません。そのディレクトリその下のすべてのサブディレクトリに適用されます。そう<Files "log.txt">キャッチ/log.txt /inscription/log.txtます。
MrWhite 2017年

1
Order Allow,Denyは2.4で廃止されているため、この回答を更新できますか?
Telarian 2018年

18

強力なパターンマッチング —これは、私がここPerishable Pressで使用している方法です。この手法は、強力なパターンマッチングを使用して、「. hta」、「. HTA」、または大文字と小文字を区別しないこれらの組み合わせを含むファイルへの外部アクセスを防止します。説明のために、このコードは、次の要求のいずれかによるアクセスを防止します。

  • .htaccess
  • .HTACCESS
  • .hTaCcEsS
  • testFILE.htaccess
  • filename.HTACCESS
  • FILEROOT.hTaCcEsS

..etc。など。明らかに、この方法はサイトのHTAccessファイルを保護する上で非常に効果的です。さらに、この手法には、「すべてを満足させる」指示を強化することも含まれます。このコードは、ドメインのルートHTAccessファイルに配置する必要があります。

# STRONG HTACCESS PROTECTION
<Files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</Files>

1
このコードを使用すると、500内部サーバーエラーが発生します。なぜだと思いますか?私はWordpressを使用しています。
Keryn Gill、2015

8
ユーザーがドットファイルにアクセスできないようにするだけの方が理にかなっていますか?のようなものを使用します<Files ~"^\..*">
SteenSchütt16年

1
チルダと最初の引用符の間にスペースが必要です。少なくとも私にとっては必要でした。〜スペース "
アートガイゲル

同じ動作で.filesを無効にしています:<filesMatch "^ \ .. *"> order allow、deny deny from all </ FilesMatch>
Pinonirvana

14

現在受け入れられている答えが正しいとは思いません。たとえば.htaccess、仮想サーバー(Apache 2.4)のルートに次のファイルがあります。

<Files "reminder.php">
require all denied
require host localhost
require ip 127.0.0.1
require ip xxx.yyy.zzz.aaa
</Files>

これによりreminder.php、サブディレクトリにあるへの外部アクセスが防止されます。.htaccess同じ効果を持つ私のApache 2.2サーバーに同様のファイルがあります。

<Files "reminder.php">
        Order Deny,Allow
        Deny from all
        Allow from localhost
        Allow from 127.0.0.1
     Allow from xxx.yyy.zzz.aaa
</Files>

はっきりとはわかりませんが、.htaccessファイル内にサブディレクトリを具体的に定義しようとしたことが原因であると考えられます。つまり <Files ./inscription/log.txt>、失敗の原因となっています。つまり、ディレクトリと.htaccess同じディレクトリにファイルを置く方が簡単で、そこで機能します。log.txtinscription


1
あなたは私の賛成票を受け取ります。これは私のApache 2.4でも機能しました。
Tschallacka


-4

<Directory>たとえば、タグを使用できます。

<Directory /inscription>
  <Files log.txt>
    Order allow,deny
    Deny from all
  </Files>
</Directory>

使用./するだけで/サイトのルートディレクトリが表示されるため、使用しないでください。

より詳細な例については、http://httpd.apache.org/docs/2.2/sections.htmlにアクセスしてください


2
ただし、<Directory>コンテナは許可されていません.htaccess。では.htaccess.htaccessファイル自体が「ディレクトリコンテナ」(ディレクトリごとの設定ファイル)です。
MrWhite 2017年

それでは、リダイレクトを使用できます。Redirect /inscription/log.txt access_denied.htmlこれによりaccess_denied.html、ユーザーがinscription/log.txt碑文ディレクトリに移動すると、ユーザーがリダイレクトされます。
ニコラス英語
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.