[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>