Software-Defined どさにっき 〜2015年2月下旬〜

by やまや
<< = >>

2015年2月23日(月)

apache 多重拡張子

_ mod_mime の多重拡張子の扱いって常識じゃなかったのか。apache をインストールしたことある人ならば、manual/hoge.html.ja という二重拡張子を持つファイルが存在してることはドキュメントを読まなくても知ってるはずだと思うんだけどなぁ。AddHandler/AddType/AddCharset/AddLanguage/AddEncoding/AddOutputFilter はいずれも拡張子によって挙動を変えるわけで、単一の拡張子しか扱えないとすればこれらのディレクティブは排他にしか使えなくて困るじゃないか。

_ で、これはセキュリティの懸念があるから使うなというのがよくわからん。hoge.php.jpg というファイルをアップロードされて、それをそのままダウンロードしたらそいつが PHP スクリプトとして実行されるじゃないか、というのはたしかにそのとおりなんだけど、それってそんなに一般的な使いかたかなぁ? むしろ、PHP の実行を \.php$ に限定した結果、hoge.php.bak みたいにサーバ上に残ってる古いファイルの中身が丸見えになっちゃうことを心配した方がいいんじゃないだろうか。もしも hoge.php.bak に別サービスに接続するための認証情報が書かれてたとしたら、PHP として実行されてしまった方がまだマシで、ソースの中身が見えちゃう方がよっぽどセキュリティ上ヤバい。状況によりけりで、AddHandler を使うのが危険だとは一概に言えないと思うんだけどなぁ。

_ もしほんとうに多重拡張子を使えないようにしたいのであれば、

<FilesMatch "\.php$">
    SetHandler php-script
</FilesMatch>
ではなく、ふつーに AddHandler で設定した上で、追加で
<Files *.*.*>
    Require all denied
</Files>
とするのがよい。こうすれば hoge.php.bak へのアクセスは PHP として実行されることもファイルの中身が見えることもない。もちろん、hoge.html.ja もこれにひっかかるので、ローカルにインストールされた apache のドキュメントを読むこともできなくなる。


<< = >>
やまや