時間をかけないでセキュアなブログを構築
Frog CMS - Content Management Simplified | Frog 0.9.5 stable released
0.95 stable が配布されています。以下のエントリーは、0.95rc2で行いましたが、stableになって、public_html直下にfrog/pluginを配置しなくても、(public_htmlの上に置いた状態で)正常に動作する事が確認できました。
つまり、ほんとに、安全になるよ。という事追記しておきます。
「安全」なブログがほしいと思う
安全の中身はそれぞれ、だろう
例えば、
ブログのエントリーを散々書き込んで、保存ボタンを押す前に、消してしまう。悲劇を解消したい。
いつの間にか、自分のブログに、大量のリンクが追加された。
作った覚えのないページが作られた。
全部記事が消えた。
等など、守るべき問題に対して、安全を確保する方法は異なる。
意図しない改ざんや、サイトへの侵入を防ごうと思っても、多くのサイトは、オープンソースを利用しているし、それぞれのオープンソースは、また、芋ズル式にオープンソースを利用する。
オープンソースは、隠し事がないので、すべてのファイルの位置は、誰でも簡単にわかるし、オープンソースの使っているオープンソースプログラムは、大抵最新ではない。
だから、カスタマイズして、安全性を高めようとする。しかし、そんな技術を誰が持っているのか...
時々、気にしている、frog CMS 0.9.5rc2で、セキュアカスタマイズを行ってみた。
最初は、10分ぐらいあれば出来る。とか書いたが、それほど簡単でもなかった。
でも、メジャーなブログやCMSでのカスタマイズより簡単だし、シンプル。CAKEPHPなどを使っている人などは、ブログフレームワークなので、なじみやすいかも
メモに残します。
カスタマイズの目標:オープンソースのファイル群にアクセスをさせない。
具体的には、標準的なサイト構造を以下のようにカスタマイズするのが、ゴールです。
(以下、いろいろ問題もあることがわかったので、エントリを分けて書く事にします。)
標準的なインストール完了から、config.php frogコアディレクトリをアクセスできないように変更
xrea無料サーバでの例です。
/virtual/frog/public_html/index.php が ドキュメントルートとして説明します。
まずは、frog0.9.5rc2(0.9.4)をインストールします。
上の左側の配置になるように、アップロードして、インストールします。
インストールが出来たら、
config.phpの書き換え
(config.php書き込み可能にして0644)
config.php で、mod_rewrite の項を true に変更
define('USE_MOD_REWRITE', true);
(config.php書き込み付加 0444にして保存)
.htaccessファイルの変更
RewriteBase /frog/ を RewriteBase / に変更
public_html/index.php書き換え
define('CORE_ROOT', 'FROG_ROOT'.'/frog');をdefine('CORE_ROOT', '/virtual/frog/frog');
に書き換え
public_html/admin/index.php書き換え
define('CORE_ROOT', '/virtual/frog/frog');
$config_file = '/virtual/frog/config.php';
ホルダをFTPなどで移動する
/virtual/frog/public_html/frog ディレクトリを public_htmlディレクトリの下から、/virtual/frog ディレクトリに移動します。
/virtual/frog/public_html/config.php も、同様にディレクトリを移動します。
動作確認をしてください。
0.9.5rc2だと、javascriptの動作がおかしくなります。
編集画面のテンプレートは、frog/app/layout/backend.phpですが、このテンプレートは、相対リンクでfrog/lugins迄のパスを書いています(../frog/plugins…)ので、部分的におかしな動作をしているようです。
選択肢は、2つです。そのファイルを書き換えるか、frogディレクトリを元に戻すかになります。
試験的に、問題になるplugins ディレクトリだけを、public_html/frog/plugins/ の位置に戻してみました。
現在のところ、プラグインは、正常に動くように見えます。
参考までに、frogで、../frog/plugins/と指定されている部分のリストをおいておきます
以上で、設定ファイルconfig.phpと、コアディレクトリの退避が概ね出来そうです。
adminディレクトリのディレクトリ名の変更については、近いうちに、また書きます。
frog CMS は、まだマイナーなCMSですが、シンプルで、メジャーなブログプログラムなどでは、困難な作業も対応が出来るかもしれないという希望を持たせてくれるプログラムのひとつです。
0.9.4以降、アップデートも簡単で、上書きインストールもできるようになりました。だんだん、よくなってきています。使ってみませんか?
ひとつのサイト内に、いくつもブログ機能を組み込むことができます。
資料:
layouts\backend.php
<script type="text/javascript" charset="utf-8" src="../frog/plugins/<?php echo $plugin_id.'/'.$plugin_id; ?>.js"></script>
layouts\backend.php
<link href="../frog/plugins/<?php echo $plugin_id.'/'.$plugin_id; ?>.css" media="screen" rel="Stylesheet" type="text/css" />
layouts\backend.php
<script type="text/javascript" charset="utf-8" src="../frog/plugins/<?php echo $javascript; ?>"></script>
translate\index.php
<li>Place the newly created translation file in the plugin's i18n directory. (This is: .../frog/plugins/<pluginname>/i18n)</li>
views\sidebar.php
...echo get_url('plugin/comment/'); ?>"><img src="../frog/plugins/comment/images/comment.png" align="middle"...
views\sidebar.php
...?>"><img src="../frog/plugins/comment/images/moderation.png" align="middle"... |<< views\sidebar.php >|| ...?>"><img src="../frog/plugins/comment/images/settings.png" align="middle"...
views\sidebar.php
...?>"><img src="../frog/plugins/comment/images/documentation.png" align="middle"...
views\index.php
...if (!is_file($file->name)) { ?><img src="../frog/plugins/file_manager/images/dir_16.png" align="top"...
views\sidebar.php
...'create_file_name'); return false;"><img src="../frog/plugins/file_manager/images/page.png" align="middle"...
views\sidebar.php
...return false;"><img src="../frog/plugins/file_manager/images/dir.png" align="middle"...
views\sidebar.php
...'upload_file'); return false;"><img src="../frog/plugins/file_manager/images/upload.png" align="middle"...
views\sidebar.php
...echo get_url('plugin/comment/'); ?>"><img src="../frog/plugins/comment/images/comment.png" align="middle"...
views\sidebar.php
...?>"><img src="../frog/plugins/comment/images/moderation.png" align="middle"...
views\sidebar.php
...?>"><img src="../frog/plugins/comment/images/settings.png" align="middle"...
views\sidebar.php
...?>"><img src="../frog/plugins/comment/images/documentation.png" align="middle"...
views\index.php
...if (!is_file($file->name)) { ?><img src="../frog/plugins/file_manager/images/dir_16.png" align="top"...
views\sidebar.php
...'create_file_name'); return false;"><img src="../frog/plugins/file_manager/images/page.png" align="middle"...
views\sidebar.php
...return false;"><img src="../frog/plugins/file_manager/images/dir.png" align="middle"...
views\sidebar.php
...'upload_file'); return false;"><img src="../frog/plugins/file_manager/images/upload.png" align="middle"...