投稿日時: 03/11/06 09:16:52
2chでApacheのチューニング情報を探しているときに、また迷信を発見してしまいました・・
「たとえば、imgboard.cgi はアップロードされたファイルを cgi-bin の下に置いてしまうので、
危険な CGI を .jpg という拡張子でアップロードした後、このファイルに
アクセスするとその危険な CGI が実行されてしまう(たぶん)。」
うーん、これは違います。このケースはありません。
迷信を撒いてますね。困ったものです
HTTPサーバの仕組みでは、拡張子から処理やマイムタイプが決定され、その後、サーバからブラウザへコンテントタイプ宣言の後にデータが行くので、サーバもブラウザもそのマイムタイプを信じてデータを適宜処理します。
仮に、危険なCGIを.jpgという拡張子で置いても、HTTPサーバはそれをCGIとして実行処理せず、image/jpegのマイムタイプをつけて、バイナリデータをサーバからブラウザに転送する(この場合スクリプト本体、つまりテキストデータが送信される)という処理になるので、サーバ上でCGIスクリプトとして実行されることはありません。
なお、「cgi-bin以下にはcgiしか置けないようになっており、拡張子と関係なくすべてcgiとして実行させる設定」のプロバイダや自宅サーバが時々ありますが、その場合は、この方が言われるように.jpgという拡張子でもCGIとして実行されることになりますが、その設定の場合は、どちらにしろ、cgi-bin以下の画像ファイルはすべてCGIとして実行されエラーになってしまうわけですから、cgi-bin以下に画像フォルダを設置して掲示板運営を行っていること自体、あり得ません。ユーザは新FAQなどを見て、「cgi-bin以下に画像を置けないプロバイダの場合」の方の設定をしているはずです。つまり、ここで書かれているようなケースは、存在せず、まったくの杞憂だといえるでしょう。
ただ、誤解して欲しくないので書きますが、自分でいろいろわかっている中ー上級者へ向けてのアドバイスとしては、パス設定が複雑になりますが、やはり、cgiはcgi-binにだけ置いて、データはデータフォルダへ置くのがセキュリティの見地から良いと思います。危険な拡張子は掲示板側で厳しく制限してありますが、絶対の安全はありません。できれば、画像保存フォルダでは、.htaccessによりCGIやSSIの実行を明示的にできなくしておくのが良いと思います(eFTPboardには標準添付)。shellも開放されているケースは、umaskもいじって置くといいでしょう。
なお、初心者の方やISPのプロバイダなどを借りられている方は、万人向け(初心者向け)におすすめしているシンプルな方の設定でやってください。厳密に言うとセキュリティ的には甘くなりますが、その手のプロバイダはプロバイダ側の責任でそれなりに安全対策がなされていますので、実用上問題ないと思います。長くやっていますが、パーミッションの設定を指示通りきちんとしていれば、アップされたデータでトラブルに遭った例はimgboardに関しては、今まで聞いた事がありません。