僕の開発サーバには、いろいろ実験した成果というか
残骸的な意味で、PHP5.3 + suhosin patch に加えて suhosin extension
も入っています。
suhosinさんは、PHPのセキュリティ的な問題を解決したり、プログラマーのミスに気づかせてくれるイカしたやつです。”suhosin”は韓国語で、日本語で表すと「守護神」っていうのもなかなかクール。
しかし、ごくごくたまに(開発環境にとって的な意味で)過剰にいろいろやってくれたりもします。
今回は、 symfony-bootstrapper さんを使ってプロジェクト開始しようと思った矢先に発生しました。
こいつの使い方は balibali 先生が解説しておりますので、そちらをご覧いただければと思います。
その中で、 phar を動かす場面があります。
PHP5.3から組み込みとなったモジュールで、 Java でいう jar 的な役割です。
$ php symfony.phar
と、早速実行とやってみたところ、エラーすら出ません。
しょうが無いので syslog を見てみたら
Sep 30 02:14:17 happyturn suhosin[11234]: ALERT - Include filename ('phar:///home/kawahara/dev/symfony.phar/_cli_stub.php') is an URL that is not allowed (attacker 'REMOTE_ADDR not set', file '/home/kawahara/dev/symfony.phar', line 9)
なんかすごく、怒られています。
勘で suhosin extension を off にしてみたところ、このエラーは出ずに正常に動いたようでした。
流石は守護神ですね。
さらに、調べてみたところ
Suhosin PHAR “URL not allowed”
なる記事を発見。
どうやら、 phar は phar というスキームを使って、include するコードがあるらしく
suhosinさんは、include で URI を読み込もうとすると、チェックが働くようです。
“disallows Remote URL inclusion (optional: black-/whitelisting)” とありますね。
というわけで上の記事では phar をホワイトリストに追加しています。
—
ちなみに、 symfony-bootstrapper にある install_vendors.sh を使うと
console でコケます。理由は、symfony側で名前空間が変っているのに
doctrineのbeta3だと対応できていないというところにあります。