プロが教える店舗&オフィスのセキュリティ対策術

httpd.confの末尾に次の記述をしてapacheをリスタートしtop.htmlにアクセスしても
403エラーとなりアクセスできません。原因が分かる方よろしくお願いします。

<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/aaa">
Order deny,allow
Deny from all
SetEnvIf REFERER localhost referer_ok
Allow from env=referer_ok
</Directory>

<Files "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/aaa/top.html">
Order allow,deny
Allow from all
</Files>

A 回答 (2件)

質問の内容を整理すると


「ローカルホストからのアクセスはすべてのファイルに対してアクセスを許可して、外部からのアクセスは許可したファイルのみアクセスできるようにしたい」
ということですね。

私も、下の行が何やっているのか(?)とよく分からなかったのですが、
ローカルホストからのアクセスを許可したかったということですね。

>SetEnvIf REFERER localhost referer_ok
>Allow from env=referer_ok

えーっと、セキュリティの話からさせていただきます。
これは、非常にまずいやり方です。
理由は簡単で、 Referer というのは、HTTPクライアント(ブラウザ)が送信してきた内容ですので、リファラーは偽装可能です。
たとえば、「Firefox addon Modify Referer」などで検索していただければ見つかると思います。
これが悪用された場合、リファラーを http://localhost/ のように偽装することで外部からの不正アクセスリスク(セキュリティホール)が生じます。
下のようにIPアドレスまたはドメイン名でアクセス制限をしてください。

<Directory ....>
Order deny,allow
Deny from all
# LAN からのみ(ネットワークアドレス指定)
Allow from 192.168.1.0/24
# LOCALHOST <-- よく設定漏れして http://localhost/ でアクセスできないことに気づく(^^;)
Allow from 127.0.0.1
</Directory>

つまり、下のような感じになると思います。

<Directory htdocs/aaa>
Order deny,allow
Deny from all
Allow from 127.0.0.1
<Files top.html>
Order allow,deny
Allow from all
</Files>
</Directory>


つぎに、<Files> で top.html のアクセス制御が上書きされなかった理由について
質問内容のような記述の <Files> はシンタックスエラーにはなりませんが、意味的にエラーになると思います。マニュアルを読む限り <Files> はファイル名を指定する(パス名ではない)ためにあります。特定のディレクトリのファイルに対して使用する場合に、 <Directory> と合わせて使用できるとあります。
<Files> は .htaccess と併用して個別のファイルのアクセスを制御するために用いるのが標準的なようです。
httpd.conf には、 <FilesMatch "^\.ht"> とあるように設定ファイルなどを隠すために使用しています。
ちなみに、 <Files top.html> を <Directory> の外で指定した場合、すべてのディレクトリの top.html にアクセスできるようになります。つまり、あるディレクトリに対して <Directory> でアクセス禁止に指定しても <Files top.html> はそれを上書きするため top.html だけはアクセス禁止が無効化されます。正常な動作ですが、セキュリティ上問題になることも考えられるため注意して使用したほうがいいでしょう。
    • good
    • 0
この回答へのお礼

詳しい回答ありがとうございます。
初心者の自分にも理解できる分かり易い回答でした。
セキュリティーの問題があるのですね、リファーじゃなくIPアドレスで識別したいと思います。
FilesもDirectoryの中で使うようにしたいと思います。
ありがとうございました。

お礼日時:2011/03/08 07:34

httpd.conf の設定例



<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs/aaa">
Order deny,allow
Deny from all
<Files top.html>
Order allow,deny
Allow from All
</Files>
</Directory>

詳細はマニュアルを確認してください。
マニュアルを有効にするには、 http.conf のマニュアル設定をインクルードします。

# Local access to the Apache HTTP Server Manual
Include conf/extra/httpd-manual.conf
↑この行の #Include を Include に変更します。

以下のようなURL(/manual/)にアクセスするとマニュアルが表示されます。
サーバ名、ポート番号は適切に置き換えてください。

http://localhost:8080/manual/
http://localhost:8080/manual/sections.html
    • good
    • 0
この回答へのお礼

回答ありがとうございます。入れ子にするのですね。
しかし、まだ何故質問内容の様にしても実現出来なかったのか理解できてません。
まずdirectoryでlocalhost以外からのアクセスを禁止して、
そのあとfilesでtop.htmlだけはどこからでもアクセス出来るように
したらtop.htmlだけはdirectoryで設定したアクセス禁止の設定を上書きして
localhost以外からでもアクセス出来るようになる、
と思うのですが、どうなんでしょうか?

お礼日時:2011/02/17 07:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!