BlogCakePHPを中心としたサイト開発情報をメインに公開。新しもの好きなので時々製品レポートなんかも。MASA-P【BaserCMS】テーマファイルを安全に配置する方法BaserCMS関連のTips続編です。導入が楽でお手軽に使える事を目指しているBaserCMSですが、一つだけ個人的に良くないかなーと思う点があります。「テーマ機能」を用いて簡単にデザインを変えられる機能がありますが、ビューファイル(*.ctp)もドキュメントルート内に置く仕様になっているため、ctpファイル単体が閲覧できてしまう問題があります。Topページのビューは、インストール直後は「/themed/demo/pages/index.ctp」にあります。「http://www.example.com/themed/demo/pages/index.ctp」とすると次のように見えてしまいます。PHPの関数コールが分かってしまうソースコードが丸わかり。ビューにコードをいろいろ書いてしまうと危険!これはあまり気持ちの良い事ではないので、ビューファイルだけは見えないところに移動してみましょう。テーマファイルは「app/webroot/themed/」以外に「app/views/themed/」内においても動作をします。そこで次の対処を行います。「app/views/」内に「themed」ディレクトリを作成するさらに、対処したいテーマ名のディレクトリを「themed」内に作成する。今回は「app/views/themed/demo/」となる「app/webroot/themed/demo」内にある「elements」「feed」「leyouts」「pages」を「app/views/themed/demo/」内に移動するなお、これが可能なのは「webrootをドキュメントルートとしている」場合のみです。ドキュメントルート内にBaserCMS本体を置いて運用されている方は対処する事が出来ません。(2011.01.26追記:「スマートURL」設定であれば、どのようなインストール方法でも上記は有効です)また、上記対処をする事で問題点もあります。管理画面上でテーマファイルの編集が出来なくなりますので、別の方法でファイルを直接扱わなければならなくなります。プログラマーの方でしたら特に問題はないでしょう。ビューファイルの拡張子がphpでしたらPHPコードとして実行されるためエラーコードがはき出されるのみですみますが、そうでない場合は普通にテキストファイルとして入手できてしまうので、場合によっては脆弱を生む事になります。これはBaserCMSに限った事ではなく、CakePHPを丸ごとドキュメントルート内において運用する場合にも起こりうる問題です。ビューにはあまりコードを書かないようにするか、ちゃんとwebrootをドキュメントルートにした上で、上記のようにthemedからビューファイルを外に追い出した方が安全でしょう。いえ、システムの方で一応ディレクトリを分ける対応をした方が問題がなさそうな気がします。丸ごとインストールされているとまあどうしようもないのですが...【追記】(2011.01.26)@nojimageさんから「.htaccessにAddHandlarでctpも加えたら」というアイデアをいただきました(ありがとうございます!)。お使いのサーバで「.httaccessの編集権」「AddHandlar使用権」がある場合は、ctpファイルをPHPコードと見なす事で、webroot内にctpファイルがあっても、コードの中身を閲覧する事を(一応)防ぐ事が出来ます。「app/webroot/.htaccess」に次のように記述します。.ctpたいていの場合、内部のメソッド・関数が見つからないために致命的エラーとなり、閲覧が出来なくなります。ドキュメントルートに丸ごとBaserCMSをインストールしている場合は「/(BaserCMSのインストールディレクトリ)/.htaccess」に記述する事でBaserCMS内の全てのctpファイルを防げます。10:26.htaccessのAddHandlarネタですが、よくよく考えるとあまりよろしくないので、FilesMatchとDenyによる制御を推奨させてください。15:13確かにAddHandlarよりもこちらの方が良いですね。どのやり方でもそうですが、問題は.htaccessが有効でないと恩恵を受けられない点...どんな環境でもいけると良いのですが。拡張子をctpではなくphpにするくらいしか方法がないですかね(^^;コメントは受け付けていません。