課題 #1193
テーマの設置場所、デプロイ方法について検討する
Status: | 終了 | Start date: | 01/27/2011 | |
---|---|---|---|---|
Priority: | 急いで | Due date: | ||
Assignee: | 江頭 竜二 | % Done: | 0% | |
Category: | その他 | |||
Target version: | 2.0.0 stable |
Description
現在のデプロイ方法は、インストール時に、コアパッケージから、webroot/themed/ にコピーする仕様となっている。
また、テーマのインストールは、直接 webroot/themed/ 内に配置してもらい、管理画面より適用する。
【webroot 内に配置するようにした理由】- デザイナーにwebroot配下しか触れせたくない、シンプルに見せたい。
- webroot 内に配置した場合、CSSやJSを静的ファイルとして読み込める。($html->linkで自動的にパス解決)
- .htaccess に次の2行を加える
AddHandler php5-script .ctp
AddType text/html .ctp
- Deny from All を記述した .httaccess を設置(この場合、CSSとJSは除外するように設定が必要)
History
#1 Updated by 滝下 真玄 about 10 years ago
本件について軽く整理しますね。
【起こりうる問題】
現状で、app/webroot/themed/内のctpファイルに直接アクセスされると、ビューファイルがそのまま「テキスト」として表示されてしまいます。
つまり、ビューコード内にセキュリティリスクを伴うコードもしくは情報を記述された場合にそれが可視化されてしまい、そのサイトの脆弱性を生む原因になると考えられます(例えばコメントにDBのアクセス方法を書くとか、そういったものを含む)。
【解決案】
その1:
テーマファイルをapp/views/themed/に展開してもらい、「適用」ボタンで「ctpファイル以外のファイル」をapp/webroot/temed/に展開する
長所:
・mod_rewrite/.htaccessが設定出来る環境であれば対策が出来る
・ユーザ側の負担にならない
・1カ所でファイル管理が出来る
短所:
・一部のファイルが2重で存在する事になる
・テーマ適用後にapp/views/themed/内に画像等を追加修正しても反映されない
・テーマの保存場所が従来と変わる
・mod_rewrite/.htaccessが設定出来ないと効果なし
その2:
.htaccessをシステムで操作する仕組みの中に、ApacheのAddHandlarディレクティブでctpファイルをPHPファイルとして見なすような記述を追加する(.htaccess)
長所:
・修正がとても楽
・最低限ビューファイルが閲覧されなくなる
・スマートURLを適用していなくても対策が有効
・ユーザ側で対策する必要がない
短所:
・サーバ依存の可能性が高い(.htaccessを使えない場合はNG。またAddHandlarを許可していない場合など)
・fatalエラーで止まるだけなので、十分な対策とは言えない(場合によってはサーバ内のパスが可視化される)
とりあえず当方からはこの2案が考えられます。
案1の方が、案2よりは確実だと思いますが、結局どちらも.httaccess等が有効でないサーバ環境では無力なので、他のアイデアも検討した方が良いと思います。
ただ「プログラムを知らないデザイナーさんでも使えるCMS」であるからこそ、ビューファイルに何を書かれるかも分からないので、出来る限りctpを不可視に出来る方法がよいと思います。
#ちなみに、dispacherでcss等が転送されるのは、1.3だとviews/themed/webrootに置けます。1.2はvendorsに置けたような気もしますが、基本はwebroot/themed/で現状通りです
長くなりましたが以上です。
#2 Updated by 滝下 真玄 about 10 years ago
もう一つアイデアが浮かびましたのでそれも書きます。
その3:
ビューファイルの拡張子を全てphpとする。そしてController::extプロパティとView::extプロパティに`php`を設定する
長所:
・PHPファイルとしてビューを置くので、最悪コードが不可視になる
・全てのサーバ環境で適用できる
短所:
・既存バージョンで使用していたテーマと互換性がなくなる
・外部からCakePHPのプラグイン等を持ってきにくくなる
#3 Updated by - nojimage about 10 years ago
その2を言い出したnojiamgeです。
その後、考え直したらAddHandlerでPHPとして解釈するのはちょっと難ありということで、
そもそもアクセスさせない方法を提案します。
https://gist.github.com/796413
と、言っておいてなんですが、masa-pさんのその3の案が現実的でいいのではないでしょうか。
以前のテンプレート拡張子となる.ctpについてはViewクラスで$extに指定されているファイルが無い場合に勝手に探して読み込んでくれます。
cakephp 1.2だと $ext > .ctp > .thtml の順ですね。(1.3になると.thtmlが無くなります。
#4 Updated by 江頭 竜二 almost 10 years ago
返事しなきゃと思いつつ2ヶ月経ってました。。
僕もその3に賛成です。
外部のプラグインについては、beforeFilterやbeforeRenderあたりでフックしてctpのまま利用する仕様にできるかもしれません。
CakePHP1.3への移行あたりで検討してみたいと思います。
※ CakePHP1.3への移行時は下位互換は無視する予定です。
#5 Updated by 江頭 竜二 almost 10 years ago
以前のテンプレート拡張子となる.ctpについてはViewクラスで$extに指定されているファイルが無い場合に勝手に探して読み込んでくれます。
あ、なるほど、外部プラグインも問題ないんですね。失礼。
#6 Updated by 江頭 竜二 almost 10 years ago
- Category set to その他
- Assignee set to 江頭 竜二
- Priority changed from 通常 to 急いで
- Target version set to 3.0.0 stable
#7 Updated by 江頭 竜二 almost 9 years ago
- Status changed from 担当 to 終了
- Target version changed from 3.0.0 stable to 2.0.0 stable
こちらの件ですが、色々と検討した結果、テンプレートの拡張子を .php に変更する方向ですすめています。
#2010 にまとめ、この件は終了とします。