Joomla!に飽きたわけではありません。以前にインストールはしたことがあったのですが、その程度で終わっていてそれ以上は見ていませんでしたが、しつこくDrupalを唱える方がいてもう一度インストールして少し使ってみました。
以前の印象
今回の印象
ある程度の規模まではJoomla!でエクステンションを作成するより何倍も早く求める物を作成できそうですが、それ以上のものはどうなのかが知りたいところです。実際独自のアプリケーションの必要性さえなければ、Drupalの方が柔軟性があってサイト制作のコストは低くなる気がします。ただ、操作性などはJoomla!の方がわかりやすく見た目も良いのでどこまでのモジュールが必要となるかで案件によってJoomla!を選択したり、Drupalにしたりというように選択していけば良さそうです。
どちらが良くてどちらが悪いとかはわかりません。どちらも優劣つけがたく、また用途によって使い分けたら良いと思うし、使い手の好みもあります。私としては、Joomla!を使っている事もあり、今後もJoomla!を中心に使っていく事にはかわりありませんが、Joomla!だけを使っていくと決めているわけではありません。
Drupalに関しては、もう少し掘り下げて使ってみないと何とも言えない感じですが、暇をみて今後も少しずつ触れていこうと思っています。
まだ、新規で構築するサイトでJoomla!1.0.xが選択されている事があるようです。それは、使えるエクステンションがJoomla!1.5と比較してダントツに多いからなのはわかっています。このサイトも1.0.xなのは自分のエクステンションがまだ、用意できていないからですし。
以下の理由でJoomla!1.5を推奨します。
理由:WEB制作会社向き
先日DS-Syndicateコンポーネントに脆弱性があることがわかって対策を書きました。それで大丈夫ですが、0の時に余計なファイルを作成されてしまうのでさらに以下のように追記しました。
このサイトの場合のように一つしかフィードアイテムを用意していない場合
$feed_id = 1;
数字の1の部分は公開しているフィードのIDに置き換えて下さい。
複数のフィードがある場合
if( !in_array( $feed_id, array(1,2,3,4,5)) ){
$feed_id = 1;
}などとarray()の括弧の中にコンマ区切りで公開しているフィードのIDを書けば良い。その中のID以外をリクエストしてきた場合は、IDが1のフィードに強制的にしてしまうわけです。そうすれば余計なファイルは生成されないで済みます。余計なファイルと言っても・・・いやこれって絶対書かないと駄目ですね。仮に10000まで順にアクセスしてきたら10000個のファイルが生成されるってことですね。ぉぃぉぃ困ったもんだ。
以前に紹介して実際にこのサイトでも使っているDS-Syndicateでセキュリティホールが公表されていました。私は、改造して使っていたりなのですが、そこまで見ていませんでした。
対応策
new_feed(mosGetParam( $_GET, 'feed_id', ""));
を
new_feed(intval( mosGetParam( $_GET, 'feed_id', "") ));
のように(他の方法でももちろん良い)数値にサニタイズすることで対処できます。
追記:さらにすでに攻撃されたかどうかは、Root/components/com_ds-syndicate/feedフォルダ内を見て下さい。そこに通常のファイルではなさそうなものがあればすでに攻撃されたものだと思われます。フォルダ内のファイルをすべて削除する必要があります。
念のためまだ10月の途中ですが、毎月行っているiLogScannerのスキャンを行ってみました。
22日現在の時点で104件の攻撃で幸い成功はしていないようです。
成功していないというのは厳密に言うと間違いです。この攻撃を使ってのインジェクション攻撃は成功しています。そしてデータベースのnameとpasswordは見る事ができたかもしれません。ですが、Joomla!は生のパスワードは保存していません。パスワードは、Joomla!の独自メソッドでハッシュ値に変更されたものなので生のパスワードを悟られる事はまずありえ無いでしょう。心配な方は、パスワードを変更してください。
ログを見てみるとDS-Syndicateに対する攻撃は、10月6日から来ています。公表されるずいぶん前の時点ですね。情報を素早く入手することももちろん大切ですが、エクステンションを導入するときには気軽に導入すべきではないことも事実のようです。また、たくさんの人が使っているから大丈夫ということも絶対言えませんし、あのサイトで紹介されているから大丈夫とも言えません。
ふと・・・Combineだとか、TagReplacerなどと作ると言っておきながら作ってない物がありますね。
昨日、別のエクステンションで少しテストしていたのですが、Joomla!1.0.xでは容赦なくGLOBALな値にして参照していたものをGLOBALな値にせずにJoomla!1.5で活用して且つ、HeaderTagに最終的に出力しようと思うと、その最後のタイミングのイベントがどうも無さそうなんです。というか考え方が間違っているのかもしれませんが、Joomla!1.5ではモジュールからHeaderTag内にも出力できるのでそれすらもカバーしようと思うとどのモジュールが(というより、最後にHeaderTagに入れたいやつは誰だ?)最後かわからないのです。これでは判断しようが無い。
Joomla!1.0.xのようにモジュールからのHeaderTagへの出力をカバーしなければ良いのですけどね。