.htaccess を見えなくするには?

Last modified: Wed Apr 24 17:31:36 2002 +0900 (JST)

注意: Apache 1.3 以降の srm.conf/apache.conf には、デフォルトで

<Files .htaccess>
    order allow,deny
    deny from all
</Files>

<Files .htpasswd>
    order allow,deny
    deny from all
</Files>

とか

<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
</Files>

とかいうものが記述されていますので、1.3 以降を新規インストールするなら以下の作業を行う必要はありません。


以下の情報は Apache ML での かわと@NEC情報システムズさんの投稿 をベースにしていろいろ追加してあります。


.htaccess (というファイル名かどうかは srm.conf の AccessFileName ディレクティブで決まるのですが) を使うと、 そのディレクトリ内のファイルへのアクセス制限などができます。 たとえば、こんな感じ:

Options IncludesNoExec FollowSymLinks

order deny,allow
deny from all
allow from 133.83

上記は、このディレクトリに関して IncludesNoExec と FollowSymLinks というオプションを指定し、 さらに 133.83.x.x ネットワークからのアクセスのみ許す、という内容です。

.htaccess ファイルの内容はセキュリティに直結していますから、 だれかに見えてほしくありません。 上記の場合は、133.83.x.x 内部の人にも見えてほしくないわけです。 ところが、.htaccess ファイルを URL に指定すると、 標準設定ではバッチリ見えてしまいます。 これは困ります。

.htaccess を見えなくするには、 .htaccess を CGI スクリプトとして認識させちゃうというテがあります。 具体的には、以下を .htaccess に追加すれば OK です。

また、 Apache httpd のバージョン 1.1 以降であれば、Location ディレクティブを使って制限できます。 以下を access.conf (httpd.confでもよい) に記述して httpd を再起動しましょう。

<Location */.htaccess>
    deny from all
</Location>

Apache httpd のバージョン 1.3 では、Location ではなく LocationMatch を使う必要があるようです。 以下を access.conf (httpd.confでもよい) に記述して httpd を再起動しましょう。

<LocationMatch "/\.htaccess">
    deny from all
</LocationMatch>

上記では .htaccess に関して述べましたが、 同様に .htpasswd なども必要に応じて保護しておきましょう。

いっそのこと、ドットファイル (. ではじまるファイル) 全てを不可視にしてしまうのもよいでしょう。例えばこうします:

<Files ".*">
    deny from all
</Files>

とか

<FilesMatch "^\..*">
    deny from all
</FilesMatch>

とか。前者は apache 1.2 以降、後者は apache 1.3 以降で有効です。


更新履歴


私について