2018/08/13)Webサイト構築で注意しなければならない箇所は決まりきっています。PHPのiniオプションでかなり危険な設定ですがデフォルトで有効かつシステムレベルでのみ設定変更可能なiniディレクティブ、allow_url_fopenがその内の一つです。このオプションが有効な場合、ほとんど全てのファイル関数でローカルファイル以外にURL(HTTP、FTP)を利用しリモートファイルを読み込みます。インクルード系の関数も同様です。include('http://code.example.com/script.php');と記述するとリモートサーバに保存されたスクリプトを読み込んでローカルホストで実行します。先日のphpbbのセキュリティーホールはこのタイプのミスだったようですね。このタイプのセキュリティーホールは【緊急より更に上】レベルの重大な問題です。何度も同じようなミスは色々なプログラムで発生しています。私も機会がある度にこのオプションの危険性について紹介していますがどうも不毛な気がしてきました。この際、この機能はデフォルト無効、有効にした場合もallow_url_fopenは利用可能なサーバを列挙可能なように仕様を変更した方が良いですね。パッチの作成は簡単なのですが...追記:allow_url_fopenがINI_SYSTEMである件を「あれ?」と思ってちょっと調べて見るとPHP4.3.4からINI_ALLだったものがINI_SYSTEMになっていますね。サーバ管理者がallow_url_fopenの動作を制限できるようにするなら、sefe_mode_url_fopen等のディレクティブを新たに作り管理者が制限できるように実装するべきです。INI_SYSTEMに変えてしまうと共有サーバでは設定変更ができない可能性があります。スクリプト中の特定箇所でのみallow_url_fopenを有効にする、などの現実的な対処も行えなくなります。IE以外にも必要インジェクション攻撃は3種類ある紹介エレクトロニック・サービス・イニシアチブのWebシステムのコンサルタントのブログです。PHPの開発、PHP4.x/5.xレガシーPHPセキュリティパッチサービスなどを行っています。ブログのサブタイトルを「書かない日記」としているのは、ブログを始めた時にあまり書かないつもりで始めたのでこのサブタイトルになっています。yohgaki@ohgaki.net私が記述したブログ中のコードは記載が無い場合はMITライセンスです。その他のコードは参考リンクなどのライセンス情報を参照ください。