1. PHP = トラブル
PHP(PHP: Hypertext Preprocessor)は、LAMPセキュリティ問題の主犯です。比較的若く、生まれは1997年で、今も成長を続けています。PHPの問題点は3つあり、生まれつきの弱点、コーダーの経験不足、そしてPHPのパッチやアップグレードが適用されない未保守サイトの存在です。
PHPの舞台裏を覗いてみると、決して美しくはない、つぎはぎだらけの混沌状態であることがわかります。まず、命名規則、構文、大文字と小文字の区別に一貫性がありません。組み込み関数の多くは機能に重複があり、似たようなことをするものの完全に同じわけではなく、ドキュメントが満足に書かれていないため、どれが何をするのか定かでありません。かなり詳しいところまで自分で調べない限り(詳細情報については「関連資料」リンクから参照)、プログラミングエラーを起こすのは必至です。
PHPは、習得が簡単に見えます。ある意味、それは事実です。動的Webサイトを立ち上げる方法を数時間で習得できます。しかし、セキュリティに不備がある場所がどこで、どうすればそれを迂回できるのか習得するには、数年を要するのです。よく知られたセキュリティホールの1つは、入力が検証されないことです。ユーザーからの入力は常に疑ってかかるべきですが、PHPには入力のチェックに役立つツールがこれといってないため、独自の検証ルーチンを書く必要があります。
Apacheのmod_phpを使ってPHPをApacheモジュールとして実行すると、Apacheプロセスのすべての資格情報がPHPに引き継がれます。つまり、Apacheが読み書きできるものは、PHPでも読み書きできます。これが意味するのは、PHPの乗っ取りに成功すれば、Apacheに直接乗り込んでいって、Apacheが接触するものならどこへでも入り込める、ということです。mod_phpを1人のユーザーしかいない単純なサイトで使うなら許せますが、多数のユーザーが共有するシステムの場合、すべてのスクリプトは同じApacheユーザーの下で実行されるため、これは大惨事を招きます。代わりに、PHPをsuEXECまたはCGIWrapの下で実行すべきです。これらのしくみは、Perl、Python、Rubyのような穏健なスクリプト言語でも利用できます。
人知れずPHP3やPHP4を使い続けているサイトはたくさんあり、バグフィックスやセキュリティパッチをまったく適用していないサイトもそれ以上にたくさんあります。PHP5がリリースされたのは2004年で、PHP3のリリースともなると1998年までさかのぼります。つまり、これは実に困った物騒な代物なのですが、たいていの場合、新しいPHPリリースにアップデートするには相当な量のコードを書き直す必要があります。さらに厄介なことに、Apache、PHP、MySQLの相性はあまり良くありません。互換性のある正しいバージョンを完全に揃えないと、まともに動いてくれないのです。新規インストールの作業を楽にするXAMMPやUbuntuのLAMPパッケージのようなオプションはたくさんあります。しかし、本当の試練が訪れるのは、システムをアップデートしようとして、どこかでバージョンの同期がとれなくなったときです。
私見を述べさせてもらうと、Perl、Python、Rubyのどれかを使う方が良いでしょう。最初の手間は少し増えますが、長い目で見ると手間や心配事は激減します。たいていのホスティングサービスは危なっかしい骨董品のLAMPスタックを後生大事に使っているので、まともなWebホスティングサービスを探したい場合はWebHosting Talkをチェックするとよいでしょう。
