アップロードされたzipファイルを解凍する時の注意点

Date 2006-04-06 10:39:12 | Category: PHP

in englishin japanese
ここに来て立て続けに、アップロードされたzipファイルを解凍した中身を反映するコードを書いてきましたが、実のところ、これらで利用している PEAR::Archive_Zip には、穴があります。

それは具体的には以下の2点です。

(1) ファイルシステムに解凍すると、Directory Traversalがある
(2) 解凍処理でメモリをすべて食いつぶすようなzipファイルが簡単に作成可能である

このうち、(1)に対しては明確な対応策があります。ファイルシステム上に解凍しなければ良いのです。

	$reader = new Archive_Zip( (アップロードテンポラリファイル) ) ;
	$files = $reader->extract( array( 'extract_as_string' => true ) ) ;

とすることで、ファイルシステムには影響なく、$files に配列として保存されます。あとは、適切に保存処理を行えば良いだけです。

その一方、(2)の方は、防ぎようがない、というのが実情です。ライブラリの方にパッチをするとしても、かなり大がかりになってしまいます。

以上から、zipでアップロードして、それをサーバ側で解凍する機能は、なんらかの方法で信用できるユーザに限るしかない、というのが実情です。

ファイルアップロードについては、CSRFの心配はありませんから(そんなのがあったら、今話題のantinnyよりも怖いでしょう)、直接攻撃系だけをケアすれば良いのが救いです。




You can read more news at PEAK XOOPS.
http://xoops.peak.ne.jp

The URL for this story is:
http://xoops.peak.ne.jp/md/news/index.php?page=article&storyid=92