[PHP-users 12740] Re: null byte attack
Osamu Shigematsu
php-users@php.gr.jp
Wed, 22 Jan 2003 16:32:33 +0900
重松です。こんにちは。
私が筋違いな考えなのかもしれないですが、
そもそも NUL (\0) を文字列にきちんと含めて、
すべての関数で、それをハンドリングできるようにするのが、
本筋だと思うのですが。
少なくとも、PHP の文字列変数には NUL を含むことができますから、
一部の C のライブラリを wrap しただけの関数が動かないのでしょう。
これらは、マニュアルに NUL を文字列の終わりとみなすため、
予期せぬ動作をすることがある、と明記する必要があると思います。
大垣さんのおっしゃること、場当たり的対処としては、
きわめてもっともですが、
私は、ereg を使って逃げるのには賛成しかねます。
問題の本質を理解しようとしないユーザに、小手先の回避策を示しても、
同様の問題ですべて尻拭いをしてあげないと、
自ら穴をふさぐことを覚えない気がするのですが。
今回問題視すべきは、性能の良い pcre ではなくて、
readfile 関数に他ならないと思いますが、いかがでしょうか。
場当たり的対処をするならば、strlen() と php が知っている
文字列の長さが異なるときは、不正なファイル名 (or URL) ということで、
はじくとか、NSString (Mac OS X) のように、ファイルシステムに
基づいた path 操作ができるような関数郡を用意してあげる、
などの対策が思いつきます。
--
Osamu Shigematsu <m5issige@mr.hitachi-medical.co.jp>