スマートフォン用の表示で見る

register_globals

ウェブ

register_globals

れじすたーぐろーばるず

プログラミング言語PHPの動作設定項目の一つ。

この項目は、Webクライアント(Webブラウザ等)から送信されたデータをPHPプログラム変数として受け渡すときの展開方法を指定する。

例として http://www.example.com/example.php?a=1&b=2 というURL(このURL自体は架空のものである)にアクセスし、サーバwww.example.com上のexample.phpを呼び出すとする。このとき、example.phpの動作開始時の状態はregister_globalsの設定によって変化する。

register_globals=off の設定では、example.phpの動作が開始される段階で、PHP配列変数 $_GET['a']と$HTTP_GET_VARS['a']が1,$_GET['b']と$HTTP_GET_VARS['b']が2という内容に初期化された状態になっている。

register_globals=on の設定では、さらにPHP変数$aが1,$bが2に初期化された状態になっている。

PHPバージョン4.1.xまでと4.2以降ではこの設定の既定値が異なっており、4.1.xまではregister_globals=on、4.2以降ではoffである。変更された理由は4.1.xまでの設定ではセキュリティ上の問題があったため(上記の例から想像できるように、PHPスクリプトが予期していない変数初期化を、URLの書き換えによって行なわせることができる)。ところがこの変更の影響で、PHPバージョン4.1.xまでを対象に作られたプログラムが、かなり簡単なサンプルでさえもPHPバージョン4.2以降で動かないということが多発しており、いわゆる「register_globals問題」として知られている。

PHP4.2以降でも、register_globalsの設定値をPHP4.1.x以前の既定値(on)にすれば過去のプログラムは動作するが、この設定状態ではセキュリティ問題を抱え込むので、インターネット上にさらすサーバーではその手は使わない方が安全である。