PEAK XOOPS - XOOPS_TRUST_PATH in englishin japanese

Archive | RSS |
XOOPS
XOOPS : XOOPS_TRUST_PATH
Poster : GIJOE on 2006-05-14 05:21:28 (45635 reads)

in englishin japanese
説明の順番が前後してしまいましたが、Duplicatable V3の前提に、XOOPS_TRUST_PATHという重要な概念があります。

XOOPS_TRUST_PATH とは、PHP定数です。XOOPSをある程度触った方ならご存じのXOOPS_ROOT_PATH の親戚のようなものです。この定数は、mainfile.phpで定義します。


define('XOOPS_TRUST_PATH','/home/yourhome/xoops_trust_path');


XOOPSでもosCommerceでも、古いタイプのOSS系PHPアプリケーションは大抵、DocumentRootの下にすべてのファイルを展開する形になっています。実はこれ、かなり危ないことで、インクルード専用のファイルをダイレクトにアクセスされることで、思わぬ脆弱性につながりかねません。

過去にもAgenda-Xというモジュールでこういう事例があり、簡単にApache権限を持って行かれました。そこまで酷くないにしても、インクルード専用のファイルをDocumentRootの内側に置くと、特に明示的な対応をしない限り、ほとんどのケースでPath Disclosureとなってしまいます。

ちなみに、インクルード用ファイルの拡張子を.incにしておくと、text/plainになってソースコードが流出してしまうから、拡張子はすべて.phpにしておくのが良い、なんて噂も、私にはガセとしか思えません。想定されていないファイルを.phpとして実行されるよりは、ソースコード流出の方がはるかにマシです。特にXOOPSのようなOSSであれば、ソースコード流出が問題になることもほとんどありません。

もちろん私自身、拙作モジュールにおいては、.htaccessなどでアクセスコントロールはしてきましたが、.htaccessの効かないホスティングサービスも少なからず存在します。IISで運用しているケースもあるでしょう。

この問題に対する最善の対策は、DocumentRootの外にPHPファイルを追い出すことです。まっとうなPHPフレームワークでは、たいていこの様な作りになっています。DocumentRoot内に置かれるべきPHPファイルは、index.php一個だけ。ロジックの本体はすべてDocumentRoot外に置く。あとは、イメージファイルやCSS, JavaScriptなどを、DocumentRoot内に置く。このような作りが正しいはずです。(「何を当たり前のことを言っているんだ」と感じた方にはお詫びします)

事実として、XOOPSはそのような作りになっていないので、少しでもそういう作りにしよう、というのがXOOPS_TRUST_PATHの主旨です。そして、XOOPS_TRUST_PATHを使えば、セキュリティ以外にもこんなメリットがあるよ、ということを示したのが、Duplicatable V3です。

XOOPS_TRUST_PATHは、DocumentRootの外に作る必要があります。それも専用に作るべきです。
もし、ホスティングサービスの事情で、DocumentRoot外にファイルを一切置けない場合は、.htaccessで、XOOPS_TRUST_PATHごと、DENY ALL してください。それだけでもほとんど同じ効果が得られます。


XOOPS_TRUST_PATH自体、まったく新しい概念ですし、3rdパーティからの提言に過ぎないので、どのように使われるべきか、まだ本当の意味で決まっているわけではありませんが、私の構想はこのようになっています。


- html
---- kernel
---- class
---- include
---- modules
-------- pico   Duplicatable V3 モジュールのインスタンス
---- templates_c (deprecated)
---- cache (deprecated)
---- uploads    アバター・スマイリー・ランク画像といった画像のみ
- xoops_trust_path
---- modules
-------- pico   Duplicatable V3 モジュールのロジック部分
---- uploads    アップロードファイルの共通置き場
---- wraps      ラップ用ファイルの置き場所
---- templates_c
---- cache
---- fullcache  最速キャッシュHackですでに利用中


ここで問題になるのは、初心者の扱いでしょう。mainfile.phpに1行追加、というだけで一気に敷居が高くなりますし、DocumentRoot外に、という説明をどうするのかなんて、非常に難しいわけですが、このあたりはXOOPS本体のインストーラで面倒をみてあげるのがベストじゃないかと思っています。

そして、XOOPS Cubeでは、このあたりも、ディストリビューションチームに任されていますので、XOOPS_TRUST_PATHにも対応したディストリビューションが登場することを期待しています。(などと他人事のように書いたりする


なお、XOOPS_TRUST_PATH という定数名は、minahitoさんのアイデアです。
他のOSSなCMSでも、DocumentRoot外に置くファイル群、という概念があり、それをTRUST_PATHと表現するということでした。
「TRUST」という言葉の響きがまさにピッタリでしょう。

0 comments

Related articles
Printer friendly page Send this story to a friend

Comments list

Login
Username or e-mail:

Password:

Remember Me

Lost Password?

Register now!