- ベストアンサー
Apacheで特定のファイルのみアクセス許可したい
- Apacheを使用して特定のファイルのみアクセスを許可したい場合、httpd.confファイルに適切な設定を追加する必要があります。
- 上記の質問で示されている設定では、指定したファイルへのアクセスが制限されているようです。
- 質問者は、この設定を変更して特定のファイルへのアクセスを許可したいと考えています。
- みんなの回答 (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 だけはアクセス禁止が無効化されます。正常な動作ですが、セキュリティ上問題になることも考えられるため注意して使用したほうがいいでしょう。
その他の回答 (1)
- OrangeCup150
- ベストアンサー率62% (109/174)
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
お礼
回答ありがとうございます。入れ子にするのですね。 しかし、まだ何故質問内容の様にしても実現出来なかったのか理解できてません。 まずdirectoryでlocalhost以外からのアクセスを禁止して、 そのあとfilesでtop.htmlだけはどこからでもアクセス出来るように したらtop.htmlだけはdirectoryで設定したアクセス禁止の設定を上書きして localhost以外からでもアクセス出来るようになる、 と思うのですが、どうなんでしょうか?
お礼
詳しい回答ありがとうございます。 初心者の自分にも理解できる分かり易い回答でした。 セキュリティーの問題があるのですね、リファーじゃなくIPアドレスで識別したいと思います。 FilesもDirectoryの中で使うようにしたいと思います。 ありがとうございました。