質問: よろしくお願いします。 PHPの入門書には、よく「セキュリティの観点から、ルートディレクトリに全部のファイルを置くのはよくない」と書かれています。 しかし、これ、具体的にどういう意味なのか、なぜよくないのか、じゃあどうすればいいのか、ということについて、ほとんど解説されてないので、ちんぷんかんぷんです。 とはいえ、ここで「誰か私にこのへんのこと全部やさしく教えて」とだけ質問するわけにはいきません。 そこで、まずは私なりに調べたり考えたりしてきたことを箇条書きにしますので、誤解している点、理解の足りない点などをご指摘いただきたくお願いします。 ■■ 1)ブラウザでいろんなサイトを見てると、Index of/ みたいな表示のもとでサーバー上のあるフォルダの中身がwindowsのエクスプローラーみたいに表示されてしまうことがあるが、そういう場合に、例えばデータベースへの接続情報が書かれているファイルなども開かれてしまうから、 Index of/ という状態でも表示されないよう、ユーザーに見られては困るものは別フォルダに入れておくべき、というのが、「セキュリティの観点から云々」の主旨である。 2)webアプリが複数のフォルダとそれぞれに入った複数のファイルから構成されているとして、どのフォルダが「ルートディレクトリ」なのかというのは、フレームワークを使って開発したのでもない限り、これといって決まりはない。フォルダの命名や構成によって確定されるものではない。 3)じゃ、どうやって、特定のフォルダを「これがルートディレクトリ」と設定するかというと、.htaccessというファイルにそのへんのことを書いておくことで実現する。 4)極端なことを言えば、ルートディレクトリには、実質的には中身スッカスカのindex.phpというファイルをひとつ置いておくだけにするのが最も安全。そのindex.phpの中のコードは、require_onceだらけで、非ルートの別フォルダ内のphpファイルを参照したり呼び出しまくればいいんだから。 5)なんにしろ、とにかく.htaccessのことを勉強しなくてはだめだ。逆に言えば、ルートディレクトリ云々については、.htaccessを勉強するだけでOK。でも「.htaccess入門」という書籍なんかない。ネットで検索してあちこち見ながら学ぶしかない。上級者の人たちもそうしてきた。 ■■ 以上5点です。 どうでしょうか?
回答: がると申します。 大体の所は mpyw さんが書かれているので、補足程度、になりますが。 ルートディレクトリ(ドキュメントルート(DocumentRoot)、という言い方のほうが、より一般的かもしれません)は、本来的には、httpdサーバの設定で決まります。 で、そのhttpdが、一般的にはApacheってものであったり、nginxってものであったり、します。 なので、DocumentRoot回りについては、Apacheやnginxについて、少しだけ調べてみると、いくつかの疑問は氷塊するかもしれません。 ただ、httpdの設定はそれはそれで結構「色々と奥も根も深い」ので、深入りするとまた疑問が沢山出てきてしまうと思うので。 適当なタイミングで「いったん」棚の上に置いておいて、後日改めて調べる、くらいの感じにしていたほうが、楽なような気はいたしますが。 ちょっとだけ書いておきますと。 Apacheでは「DocumentRoot」、nginxでは「root」という名前で、それぞれ、ドキュメントルートの場所を指定します。 以上、何かの参考にでもなれば幸いです。