実は、このサイトについては、あえて本家版で運用しています。
さすがに、2.2.x には穴が多すぎて自分で使う気にはとてもなれませんが、2.0.x 系列であればそれほど酷いことはありません。Protectorとの併用で十分に実用になるでしょう。
実は、2.0.13.2に上げたのは最近なのですが、以下のセキュリティパッチについて、その差が気になったので、ここにメモしておきます。
JP版:
2.0.12-JP -> 2.0.13a-JP
本家版:
2.0.13.1 -> 2.0.13.2
リダイレクトメッセージは、時間がかかって邪魔だと思いませんか?
実際、あのリダイレクトメッセージは、無駄なサーバ負荷にもなっています。
とうわけで、okuhikiさんの書込をヒントに、メッセージをじっくり読みたい人にも、さくさく作業したい人にも最善と思われるHackを施してみました。
このサイトで投稿などしてみればお判りいただけると思いますが、リダイレクトメッセージがリダイレクト後のページに、左ブロックとして表示されます。
また、リロードすれば消えるようにも作っています。ただし、このサイトには、FCH(ページ全体のキャッシュ)がかかっているので、リロードではたぶん消えません。
Hack方法はきわめて簡単です。
include/functions.php の redirect_header() 関数をちょっといじって、あとは、テーマを書き換えるだけです。
コアバージョンによって、結構違うのが面倒といえば面倒ですね。
2.0.13a では、include/functions.phpが書き変わって行数が違っていたので、そこを修正しました。また、HTTPレスポンス分割攻撃の可能性も0ではないため、一応対策コードも追加しておきました。
PHP5.0.5では参照の仕様が大きく変わり、参照で渡される引数に変数以外を送ると
Fatal error: Only variables can be passed by reference
というエラーで止まります。
ただ、普通のオブジェクトでもこのFatalエラーが出るようで、むしろバグと呼ぶべきものです。
myblocksadmin や mymenu だと、このFatalエラーに引っかかるパターンがあったため、とりあえずそれらのコードを修正しました。
まずは、その大元であるblocksadminモジュールから更新しましたが、順次、他のモジュールも対応していきます。
基本的には、GTicketクラスの利用方法が問題になっていますので、単にmyblocksadminやmymenuを差し替えただけではうまくいかないかもしれません。もう少々お待ちください。
XOOPSモジュールを開発していて思ったことは、PHPで書かれたWebアプリケーションにはあまりにもセキュリティホールが多すぎるということです。
今までは、それらのセキュリティホールを逐一指摘していましたが、それだとあまりに効率が悪すぎます。穴を開けてしまう原因は、Webアプリケーションの正しい作り方を知らないことが最大の理由ですが、あいにく攻撃方法について詳しく記述した良書がなかったので、自分で書いてみました。
私自身の知識と経験をすべて詰め込んだ、まさに「セキュアなWebアプリケーションを書くため」の本です。自分で言うのも何ですが、PHPプログラマー必携の本だろうと確信しています。このレベルでセキュリティについて書かれたPHP関連本は他にないでしょう。
現実に、書店に行くと、穴だらけのサンプルスクリプトを堂々と載せている「PHP入門書」が数多く存在しています。それらで入門しても良いのですが、そうやって作ったアプリケーションを公開する前に、必ずWebアプリケーションならではのセキュリティ問題について学んでください。初心者こそ読むべき本で、そのために、出版社と交渉して、値段を税込み2,000円以内に抑えるようお願いしたほどです。
以下書籍データ:
「PHPサイバーテロの技法」
GIJOE著
ソシム社 http://www.socym.co.jp/
予価1,800円(税別)
2005/11/25 発売予定