[PHP-users 4671] Re: php4.1.1 での変数の扱いが厳密になってる

Youichi Iwakiri php-users@php.gr.jp
Sat, 12 Jan 2002 13:24:20 +0900


いわきりです。

Nakamura Kazuto wrote in <200201110952.AA00071@rakkasei2.sainet.or.jp>:
 >> >ためしに、php4.1.1 でテストコードを書いたら、
 >> >変数の扱いが厳密になっていて、
 >> >いままでのコードの書き方だとエラー出まくり!です。
 >> >    if ( $val == true ) { $str = "aiueo"; }
 >> >  Warning: Undefined variable: val in /home/htdocs/test.html on line 2
 >> >  Warning: Undefined variable: str in /home/htdocs/test.html on line 3
 >> >というエラーが出ます。
 >>php.iniの設定で
 >> error_reporting = E_ALL
 >>に(なって|してい)ませんか?
 >> >(1) あいまいなコードを書く自分が悪いんだからちゃんと書きましょう。
 >>(2)で回避は出来るけど、(1)を実践しましょう :-)

 >ということで実践してみようと思ったのですが、マニュアルを見ても
 >変数宣言の方法についての記述が見当たらないのですがどこを見ると
 >書いてあるのかご存知の方おりませんか?

変数の宣言は出来ません。
*私が*実践すると言っている部分は、有るか無いか解らない変数を
 if ( $val == true )
見たいに評価するコードを書かないってこと、ある変数を評価する
直前で初期化(というか値を代入)するって事です。

register_global On

が問題になるから*使わないことをお勧めする*とされているのは
4.1.0 リリースアナウンスメントにも例題が書いてありますけど
ある変数が未定義であることを前提とした処理を書くと問題が
発生しうるからです

hoge.php
<?php
// $debug_mode = true;

if ($debug_mode) {
  ...
} else {
  ...
}
?>

といったコードでも本人はコメントアウトしたので$debug_mode == trueの
ブロックは通らないと思うかもしれないですが、クライアントからの
リクエストが
 http://www.foo.domain./hoge.php?debug_mode=1
となっていただけで見られて困るものを見られてしまうからです
この例の場合だとコメントアウトではなく
$debug_mode = false
と*ちゃんと*書くってことです。

未定義変数の参照が行われた旨のメッセージがでると言う事は
外部からの攻撃の対象が内在する可能性があるという注意喚起
であると思っています。

#こんな回答でいいですか? > 詳しい人