.htaccess活用法(10).htaccess(拡張子がhtaccessということで、ドットが必要です。ファイル名がないので最初戸惑いますが、こういうものだと思ってください。)が利用可能だと、
10.ダウンロードされるべきでないファイルがダウンロードされるのを防ぐMIMEとはMultipurpose Internet Mail Extensionの略。例えば、htmlファイルであれば、「text/html」というMIMEタイプが設定されているのが普通であり、gif画像であれば、「image/gif」です。拡張子とMIMEタイプが1対1ならば、確かにMIMEタイプなるものの設定はサーバ側でする設定は不要なはずです。しかしながら、例えば、「http://www.example.com/getimage.cgi?image_no=123」なるURLがあった場合に、ブラウザはどのように判断すべきでしょうか? 「.cgi」は「text/html」でしょうか?
このようにMIMEタイプの指定は重要です。そして、あらかじめ、代表的なMIMEタイプについてはサーバ側で設定されています。もし、サーバ側で予め設定されていない場合は、ブラウザはそのファイルをどのように表示していいのか分からないので、そのままテキストとして表示したり、いわゆるダウンロード画面が表示されます(広義の意味では、ブラウザに画像がそのまま表示されるのであっても「ダウンロード」されていることには限りませんが、ここでは、IEなどで「セキュリティーの警告」が表示されて、「保存する」を選ぶと、保存するフォルダーを選択できる「あれ」を意味しています。)。 仮にMIMEタイプがhttpd.confや.htaccessで設定されていない拡張子のファイルの場合、ダウンロード画面が現れてしまうことから、例えば、PHPなどでinclude(or require)するファイルには注意しなければなりません。includeするということから「.inc」という拡張子を使ったとすると、たいていのサーバではそのような拡張子についてMIMEタイプが設定されていないはずですから、困った現象が起こりえます。仮にincludeファイルのファイル名が外部に漏れた場合、そのファイル名を絶対URLで指定すれば、ダウンロードされてしまいます。 対処策としては、「データファイルを守る」の章で説明したように、「.inc」ファイルへのアクセスを禁止するか(http://〜経由でのアクセスを禁止しても、PHPファイルからrequireすることは可能です。)、そもそもhttp://〜経由でのアクセスが不可能なように、DocumentRootより上に設置することも有効です。もしくは、AddTypeディレクティブを使って、しっかりとMIMEタイプを指定します。 AddType application/x-httpd-php .inc これにより、「.inc」ファイルはPHPファイルとして解釈されますから、http://〜.incに直接アクセスされることでダウンロードされるのを防ぐことができます。
(検索エンジンの巡回ロボットの中には引数(URLの『?』以下)を無視して巡回するものがあります。この時、プログラム内で適切な処理がなされていない場合、引数なしでプログラムが処理されたその結果が、検索エンジンに掲載されることになります。前述のような「Warning〜」のようなセンシティブな情報が掲載されることもあります。ご注意ください。) ですから、仮にこのような情報が攻撃者に漏れても、ダウンロードされないようにしておく必要があります。さらに、万が一ダウンロードされてもリスクが最小限になるように、例えばPostgresへの接続IDやパスワードを直接ファイルに書き込まないなどの対策は必要です。二重三重に防御は必要です。
次のページでは、このAddTypeを使った実用例として、もう一つ、「SSIを「.html」で利用する方法」についてご紹介します。 |