[PHP-users 11837] Re: PHPバージョンによる相違

Osamu Shigematsu php-users@php.gr.jp
Wed, 27 Nov 2002 13:01:13 +0900


重松です。大垣さん、こんにちは。
いつもセキュリティ関連のアドバイスをありがとうございます。

> register_globals=onでも安全なプログラムは作成できます。
> しかし、register_globals=onで変数汚染バグがないプログ
> ラムを作るのはregister_globals=offに較べてかなり大変
> です。

変数汚染バグとして大垣さんはどのようなケースを想定されていますか?

私は単純に初期化していない変数に意図しない値を送りつける以外の
危険性が見出せません。

あえてあげるならば、post, get どちらからきたかを含め、
値の出所が不明確なことは問題でしょう。

ただ、出所がわかったところで、hidden で post した値だから、
内容を精査しない、というのでは、出所が確認できたところで、
まったく安全になりえません。

たとえば、変数の汚染に対処するだけならば、

function my_proc(){
	// globals で引っ張る変数を制限するなど...
	// ここに本来の処理を書く
}
my_proc();

これだけで、変数の汚染から随分身を守れると思います。
実際のところ、他人が開発したスパゲッティプログラムを改修するときに、
変数の上書きを防ぐために用いた手段です。

> # 仮に私が、既存スクリプトをセキュアーな状態にオーディット
> # する場合、register_globals=onを維持したままで安全に
> # する方が見積もりは高くなります。もちろん、他の条件がはっ
> # きりしないと正確な見積もりはできませんが...

セキュアな開発を楽にするために、register_globals = off が
あるのですから、当然そうなりますよね。

> > それを、あたかも深刻なセキュリティ上の問題のように
> > 「事実誤認」させるような意見が目立ちますし、
> 
> 私もセキュリティー上の大きな問題として考えている一人です :)

この件に関して、私もセキュリティ上の重大な問題と認識はしています。
そして、本来あるべき姿になったともお思います。

ただ、じゃあ、register_globals = off だからすなわち危険ではないでしょ、
ということです。件のスクリプトは内容がまったく不明ですから。

> register_globals=onの危険性はBlackHatなどで何年間
> に渡って何度も指摘されているにも関わらず、register_globals=on
> により多くの危険なスクリプトが量産されてきた現実があります。
> 
> # 危険なスクリプトには変数汚染以外の問題もある場合が多い
> # ですが...

というか、危険なスクリプトは、変数汚染以外にも問題があり、
言い換えると、register_globals = on にしても、
問題は解決しないだろうと推測します。
# 変数汚染は少なくとも XSS 脆弱性などよりも気づきやすい穴と思います。

つまり、元からセキュリティに考慮してあるスクリプトであれば、
register_globals = on の変数汚染に対処済みでしょうから。

> 車に例えるなら、register_globals=onはブレーキの効きを
> 悪くする変わりに、多少乗り心地を良くできる危険な機能、と言っ
> た所と思います。
> 
> ブレーキの効きが悪くても車を安全に運転する事はできますが、
> 効率が良いとは思えません。

それは違うような。。。

今までのスクリプトとの互換性が損なわれたに過ぎず、
新規に開発するならば、むしろ、効率はよいのですから、
乗り心地 (= 開発効率) はよくなっているはずです。
そして、安全性も向上していると思います。

つまり、便利で快適な装置なんだけど、旧車につけると、
新車を買うくらいコストがかかることがあるかも、見たいな感じでは。

P.S.
ロールスロイスの件は知りません。
そんな身分ではないので。;)
ぺたぺたのFRPのシートに座っている状態です。
カーボンバケットほすぃ〜

-- 
Osamu Shigematsu <m5issige@mr.hitachi-medical.co.jp>