[PHP-users 4254] PHP 4.1.0 Release Announcement日本語版

Masaki Fujimoto php-users@php.gr.jp
Wed, 12 Dec 2001 17:08:35 +0900


ふじもとです。

ご存知の方も多いかと思いますが、4.1.0では非常に重要な変更がなされている
のでとりあえずリリースアナウンスの該当箇所(FULL LIST OF CHANGES以外の箇
所)を和訳しました。

要は

- register_globalsをonにするのは止めてください。代わりに$_GET, $_POST等
  が使えます。
- 以前のバージョンの拡張モジュールをロードしようとするとクラッシュしてし
  まうので気をつけてください

ということです(他にも多々あるようですが)。

お役に立ったら嬉しいです。

なお、急いで訳したため意訳も多いです。あくまで全体像をつかむためのものだ
と考えてください。(大筋では間違っていないはずですので)

FULL LIST OF CHANGESは時間が許して、且つ需要があれば和訳してみようかと考
えていますが、需要があるかどうか怪しいものなので保留中です。


------------- from http://jp2.php.net/release_4_1_0.php -------------

PHP 4.1.0 Release Announcement 

長いQA(Quality Assurance)プロセスを経て、ついにPHP 4.1.0がリリースされま
した。http://www.php.net/downloads.php でダウンロードできます。

PHP 4.1.0 に含まれる重要な更新は以下の通りです:

- 新しい(フォームから送信された値等の)入力インターフェースによるセキュリ
  ティの改善(後述)
- 全体的なパフォーマンスの向上
- Windowsでのパフォーマンスと安定性の劇的な向上
    Windows上でのマルチスレッドサーバモジュール(ISAPI, Apache等)だと、負
    荷が掛かった状態でも30倍程度速度が向上します。Windows版PHPの改善に協
    力してくれたBrett BrewerとMicrosoftの彼のチームに感謝します。
- 拡張モジュールのバージョニングサポート
    現在の所ほとんど使用されていませんが、この仕組みはバージョンの異なる
    拡張モジュールを別のモジュールとして扱うために導入されています。この
    変更による否定的側面は、以前のバージョンのPHP対応した拡張モジュール
    をロードすると、分かり易いメッセージを出力する代わりにクラッシュして
    しまうことです。PHP 4.1.0用にビルドされた拡張モジュール*だけ*を使用
    するように気をつけてください。
- すぐに使える(turn-key)出力の圧縮サポート
- *多くの*バグフィクスと新しい関数

お気づきの人も多いかと思いますが、このバージョンは非常に歴史的なものです。
なぜなら(バージョン番号の)2番目の数字を初めてインクリメントしたからです:)
この前例の無い変更には主に2つの理由、すなわち新しい入力インターフェース
とバージョニングサポートによってモジュールのバイナリレベルでの互換性が失
われたことによります。

以下の記述は新しい入力方式(ここで言う入力方式とは、フォームから送信され
た内容やクッキー、環境変数、セッション変数等にPHPスクリプトからアクセス
する方法のことです)に関するものです。PHP 4.1.0での変更点の完全な一覧はこ
のセクションの次にあります。

-----------------------------------

セキュリティ:新しい入力方式

なによりもまず、貴方がこの先何を読むにせよ、PHP 4.1.0は以前の入力方式を
サポート*する*ということを強調しておきます。以前のアプリケーションは変更
することなしに問題なく動作します。

さぁ、古い話はほうっておいて先に進みましょう :)

いくつかの理由によって、register_globalsがonになっている(つまりフォーム、
サーバそして環境変数が自動的にグローバル変数になる)と、色々な意味で危険
があります。例えば、以下のようなちょっとしたコードを考えてみましょう:

<?php
if (authenticate_user()) {
  $authenticated = true;
}
...
?>

このコードは危険です。なぜならリモートユーザが'authenticated'をフォーム
変数として送信するだけで、たとえ authenticate_user() がfalseを返したとし
ても $authenticated は実際には true となってしまうのです。これは単純な例
ですが、実際にも少なからぬPHPのアプリケーションがこの機能に関連する問題
によって危険なものとなっています。

安全なコードをPHPで書くのは十分に可能ですが、私たちはPHPが危険なコードを
あまりに簡単に書けてしまうのは良くないと考えて、大規模な変更を行い、
register_globalsを使用*しない*ように推奨する決心をしました。言うまでもな
く、世界中の非常に多くのPHPコードはこの機能の存在を前提としているのでPHP
から実際に削除してしまう、という考えは現在のところまったくありませんが、
出来る限りこの機能の使用を中止するように推奨していくつもりです。

register_globalsをoffにしてPHPをアプリケーションを書くユーザの助けとなる
ように、以前のグローバル変数の代わりとなるようないくつかの新しい特別な変
数を追加しました。新しい特殊な配列は以下の7つです:

$_GET - GETを通じて送信された内容が格納されます
$_POST - POSTを通じて送信された内容が格納されます
$_COOKIE - HTTPクッキーの内容が格納されます
$_SERVER - サーバ変数の内容が格納されます(例:REMOTE_ADDR)
$_ENV - 環境変数が格納されます
$_REQUEST - GET, POST, クッキーの内容が格納されます。言い換えると、ユー
            ザから送信された全ての情報ということです。セキュリティ的側面
            から見ると必ずしも信頼できるものではありません。
$_SESSION - セッションモジュールにより登録された内容が格納されます

さて、これらの変数は特殊な内容を格納していますが、他にも特別なことがあり
ます。それは、どのようなスコープであっても自動的にグローバル変数として扱
われる、ということです。これはつまり、'global'宣言をすることなくどこでも
これらの変数にアクセスできるということです。例えば:

function example1()
{
	print $_GET["name"];   // 動作します。'global $_GET;'は不要です!
}

といったコードが問題なく動作します。この機能が古いコードを新しいコードに
書き直す際の痛みを和らげてくれることを期待しています。また、この機能は新
規にコードを書くが非常に簡単になるという自信があります。もう一つ、ちょっ
とした機能があります。それは$_SESSION変数に新しい内容を追加すると、その
内容を自動的に(つまり、session_register()を呼んだかのように)セッション変
数として登録してくれる、ということです。この機能はセッションモジュールに
関してのみ適用されます。つまり$_ENVに新しい内容を追加しても、暗黙のうち
にputenv()が実行される、ということはありません。

PHP 4.1.0 はまだデフォルトでregister_globalsをonにしています。これは過渡
期のバージョンなので、私たちはアプリケーションの作者、特に世界中の人々に
使われるようなアプリケーションの作者の方々に、register_globalsがoffになっ
ている環境でもそのアプリケーションが動作するように変更することを推奨しま
す。もちろん、PHP 4.1.0 で提供される新しい機能を使用することで移行を簡単
にすることが出来ます。

PHPの次のsemi-majorバージョンでは、PHPを新規インストールしたときにはデフォ
ルトでregister_globalsがoffとなる予定です。しかし心配は不要です。すでに
register_globalsがonになっているphp.iniファイルがある場合にそれを変更す
るようなことはありません。新しいマシンにPHPをインストールした場合(主とし
て新規の場合)にのみ影響します。もちろん、それをonにすることもできます。

注意:これらの配列のうち、いくつかは古い名前(例えば $HTTP_GET_VARS)を持っ
      ています。これらの名前はまだ使用可能ですが、この短くて自動的にグロー
      バルとなる新しい変数を使用することをお勧めします。

この問題を指摘、分析してくれた Shaun Clowes (shaun@securereality.com.au) 
に感謝します。

- 以下省略 - 
---------------- ここまで ----------------

# CVS版のZend EngineがBSDライセンスに変更されています!
# 個人的に非常に嬉しい...
 
--
藤本 真樹

アストラザスタジオ
fujimoto@studio.co.jp