Apacheで特定のファイルのみアクセス許可したい

このQ&Aのポイント
  • Apacheを使用して特定のファイルのみアクセスを許可したい場合、httpd.confファイルに適切な設定を追加する必要があります。
  • 上記の質問で示されている設定では、指定したファイルへのアクセスが制限されているようです。
  • 質問者は、この設定を変更して特定のファイルへのアクセスを許可したいと考えています。
回答を見る
  • ベストアンサー

Apacheで特定のファイルのみアクセス許可したい

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>

  • HTML
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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 だけはアクセス禁止が無効化されます。正常な動作ですが、セキュリティ上問題になることも考えられるため注意して使用したほうがいいでしょう。

MenPin
質問者

お礼

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

その他の回答 (1)

回答No.1

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

MenPin
質問者

お礼

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

関連するQ&A

  • apacheで<Directory>が機能しません

    apache2.2で、ヴァーチャルホストで複数ドメインを使用しています。 httpd.confの共通指定部分?に<Directory>や<Files>で下記のような指定したことが無視されます。 ・・・ヴァーチャルホスト設定部分の中に指定してもダメでした。 <Directory /home/user/html/aaa/bbb> Order deny,allow Deny from all </Directory> <Files ~ "^\.ht"> Order allow,deny Deny from all </Files> DirectoryMatchやFilesMatchも無視されます・・・ しかし、LocationとLocationMatchでやった場合は機能しました。 ちなみに、.htaccessに Order allow,deny Deny from all と、書いても無視されました・・・(リダイレクトや書き換えなどは使用できたので.htaccess自体は機能していると思うのですが) coreモジュールは入っています。 mod_authz_hostは、LoadModuleで読み込んでいます。 それ以外のモジュールが必要なのでしょうか? なぜ、Locationは使えるのに、DirectoryやFilesは使えないのでしょうか? 原因がさっぱりわかりません。詳しい方よろしくお願いします。

  • apacheのScriptAliasの記述について

    どなたか,ご教授いただければ幸いです。 WindowsXp Proでapacheを動かしています。次の設定で,cgiはうまく動作していました。 --- <IfModule alias_module> ScriptAlias /cgi-bin/ \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/\" </IfModule> <Directory \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin\"> AllowOverride None Options ExecCGI Order allow,deny Allow from all AddHandler image/gif .gif AddHandler image/jpeg .jpg </Directory> --- これに, http://www.miloweb.net/win/server/apache.html を参考にして,各ユーザーフォルダでcgiが実行できるようにしようと,次のようにしました。 --- <IfModule alias_module> ScriptAlias /cgi-bin/ \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/\" ScriptAlias /cgi/ \"C:/www/users/*/cgi/\" </IfModule> <Directory \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin\"> AllowOverride None Options ExecCGI Order allow,deny Allow from all AddHandler image/gif .gif AddHandler image/jpeg .jpg </Directory> <IfModule mod_userdir.c> UserDir \"C:/www/users/*/\" </IfModule> <Directory \"C:/www/users/*/cgi/\"> AllowOverride None Options ExecCGI Order allow,deny Allow from all AddHandler image/gif .gif AddHandler image/jpeg .jp </Directory> --- その結果, http://localhost/~user/ としてuserのホームページにアクセスできるようになったのですが, cgiについては, http://localhost/~user/cgi/・・・ としてもアクセスできません。どなたか原因をご教授いただけないでしょうか。 ScriptAlias /cgi-bin/ \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/\" ScriptAlias /cgi/ \"C:/www/users/*/cgi/\" の行を入れ替えると,\"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/\"においてあるcgiが実行できなくなります。ScriptAliasは1行目しか有効でないようにも見えるのですが,上に書いた参考URLではできているようなので,戸惑っています。

  • 【Apache】<Files ~>と<FilesMatch>及び、<Directory ~>と<DirectoryMatch>の違いは?

    <Files ~ "(?i:\.ini|\.tmp)$"> Order Deny,Allow deny from all </Files> と、 <FilesMatch "(?i:\.ini|\.tmp)$"> Order Deny,Allow deny from all </FilesMatch> また、 <Directory ~ "^/www/.*/[0-9]{3}"> Order Deny,Allow deny from all </Directory> と、 <DirectoryMatch "^/www/.*/[0-9]{3}"> Order Deny,Allow deny from all </DirectoryMatch> は、 どうも同じ挙動をしているように思われます。 (違っていたらご指摘ください。) Apacheのマニュアルには、 (http://httpd.apache.org/docs/2.0/ja/mod/core.html) <Files> ディレクティブ の項目を見ると、 //=========================================================== ~ という文字を付加することで拡張正規表現を使うこともできます。 例えば、 <Files ~ "\.(gif|jpe?g|png)$"> とすることにより、一般的なインターネットの画像フォーマットにマッチします。 ただし、 <FilesMatch> を使う方が 推奨されています。 //=========================================================== とあるのですが・・・。 (ただ、<DirectoryMatch> を使う方が 推奨されています。とは書いてないようです) これら、 <Files ~>と<FilesMatch>及び、<Directory ~>と<DirectoryMatch>の違いは、 いったいなになのでしょうか? ご存じの方いらっしゃいましたら、お教えいただければ幸いです。

  • Apache(Ver 2.4.4)の設定のエラー

    おはようござます。 Win VISTAです。 Apache(Ver 2.4.4)の設定をしています。(XAMPP 1.8.3) いろいろと参考書を見ながら、意味もわからずhttpdファイル(C:\xampp\apache\conf\httpd)のセキュリティの設定変更をしていますが、 「Access forbidden! 要求されたディレクトリへのアクセス権限がありません。 インデックスドキュメントが存在しないか、 ディレクトリの読み込みが許可されていません。 サーバーの障害と思われる場合は、ウェブ管理者までご連絡ください。」 というエラーが出て困っています。 セキュリティの設定の変更までは、正常にインストールされているとの確認画面が出ていましたので、この変更のミスが原因としか考えられません。 何とど宜しくお願いします。 ============================================================= httpdファイル(C:\xampp\apache\conf\httpd)の内容(変更後です) <変更前の内容はバックアップをとっていませんのでわかりません・・・・> <Directory /> AllowOverride none Require all denied </Directory> DocumentRoot "C:/xampp/htdocs" <Directory "C:/xampp/htdocs"> ・ ・ ・ # Order allow,deny # Allow from all Order deny,allow Deny from All Allow from localhost 127.0.0.1 # AllowOverride All ・ ・ # Require all granted </Directory> ・ ・ ・ <Directory "C:/xampp/cgi-bin"> AllowOverride None Options None # Order allow,deny # Allow from all Order deny,allow Deny from All Allow from localhost 127.0.0.1 # Require all granted </Directory> ============================================================= (C:\xampp\apache\conf\extra\httpd-xampp)<このファイルは全く書き換えていません。> <Directory "C:/xampp/php"> AllowOverride None Options None Require all denied <Files "php-cgi.exe"> Require all granted </Files> </Directory> ・ ・ ・ <Directory "C:/xampp/cgi-bin"> <FilesMatch "\.php$"> SetHandler cgi-script </FilesMatch> <FilesMatch "\.phps$"> SetHandler None </FilesMatch> </Directory> <Directory "C:/xampp/htdocs/xampp"> <IfModule php5_module> <Files "status.php"> php_admin_flag safe_mode off </Files> </IfModule> AllowOverride AuthConfig </Directory> </Directory> Alias /licenses "C:/xampp/licenses/" <Directory "C:/xampp/licenses"> Options +Indexes <IfModule autoindex_color_module> ・ ・ </IfModule> Require all granted </Directory> =============================================================

    • ベストアンサー
    • PHP
  • htaccessで直リン禁止とアクセス許可を同時に設定するには?

    現在、下記のようにリファラーで直リンを制限しています。 SetEnvIf REFERER "http://hoge.jp/" Lilith Order Deny,Allow Deny from all Allow from env=Lilith この場合は、「http://hoge.jp/」を経由しないとアクセスできないませんが、特定のホストからはリファラーによる制限を受けずに、直接アクセスできるようにしたいと思っております。 どのように記述すれば良いのでしょうか。 アドバイスを御願い致します。

  • 特定ディレクトリからのみ画像リンクを可にする

    良くある、htaccessでの、直接リンク禁止の類型なんですが、 指定がフォルダを追加したいものです。 サイト http://mydomain.co.jp/ 特定のディレクトリ http://mydomain.co.jp/directory/ 特定の画像ディレクトリ http://mydomain.co.jp/images/directory/ 想定としては、http://mydomain.co.jp/images/内の画像はどのページからでもリンクできるが、http://mydomain.co.jp/images/directory/内の画像はhttp://mydomain.co.jp/directory/以下のページでしか表示できない、としたいです。 あくまでイメージとしては以下のようなものを書いて(以下が誤りなのは承知してます)、特定の画像ディレクトリ下に置く、という感じだと思うのですが、同ドメイン内では普通に画像が表示されているので、 .htaccess SetEnvIf Referer "^http://mydomain\.co\.jp/directory/" check SetEnvIf Referer "^$" check Order deny,allow Deny from all Allow from env=check やりたいことがhtaccessでは出来るのだろうかと思いまして。 (apacheの<directory>という方法は知ってるのですが今回apach使えないため) よろしくお願いします。

    • 締切済み
    • PHP
  • CGIの設置ができません。

    Apacheのhttpd.confを設定して、aska.cgiという掲示板を動かそうとしているのですが、うまく動きません。 色々調べた結果、httpd.conf内のOptionというところにExec CGIを追記すればいいとのことだったので、 <Directory "C:/Program Files/Apache Group/Apache2/htdocs"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> としましたが、 Options ExecCGI is off in this directory: C:/Program Files/Apache Group/Apache2/htdocs/aska/aska.cgi, referer: http://localhost/aska/ とerror.logには表示されてしまいます。 ちなみにaska.cgiは C:/Program Files/Apache Group/Apache2/htdocs/aska/ に入っています。 よろしくお願いします

  • cgi-bin配下のファイルに読込許可を!

    最近、Apache2を使い始めたばかりで設定がよくわかりません。 Apacheの設定ファイルで、httpd.confというファイルがありますが、その中で、 ScriptAlias /cgi-bin/ "C:/Apache2/htdocs/cgi-bin/" <Directory "C:/Apache2/htdocs/cgi-bin"> AllowOverride None Options All Order allow,deny Allow from all </Directory> と記述して"C:/Apache2/htdocs/cgi-bin"配下にあるファイルに CGIが動作するように許可しました。 しかし、これだと逆に"C:/Apache2/htdocs/cgi-bin"配下にある HTMLファイル(.htm等)が読み込めなくなってしまいます。 cgi-bin配下にあるhtmlファイルも表示できるように許可を 出したいのですが、どのように設定すればよろしいのでしょうか?

  • FC2無料ホームページでは、「SetEnvIf 」は使えない?

    FC2無料ホームページサービスを利用しています。 .htaccessが使用できるので、「SetEnvIf」を使用しようと思いましたが、うまくいきません。 文法が間違っているのでしょうか? それとも、「SetEnvIf」が使えないのでしょうか? SetEnvIf REFERER "○○○.web.fc2.com" ref01 Order Deny,Allow Deny from all Allow from env=ref01

  • .htaccessのアクセス制限のことで

    レンタルサーバーを利用してブログをやっております。 最近、海外からのスパムが多くなり、.htaccessを設置してアクセス制限をかけようかと思い.htaccessファイルを設置しましたらページそのものが見れなくなってしまいました。 order deny,allow deny from all allow from .jp SetEnvIf Referer "拒否ドメイン" deny_ref order allow,deny allow from all deny from env=deny_ref このような書き方は間違えているのでしょうか。 こちらのやりたい事としましては、海外からのアクセスを拒否、日本でも一部のドメインの拒否、一部のサイトからの直リンク拒否です。 どうそ、よろしくお願いします。

専門家に質問してみよう