pico に載せるwysiwygエディタを検討しているのですが、とりあえずcommon/spawは実装しました。
その次の候補として、高機能という評判のFCKEditor(2.3.2)を試してみました。
ダウンロードしてみて驚いたのは、フロントエンドの素晴らしさに比べて、あまりにもバックエンド(といってもPHPだけですが)の出来が甘いことです。
アップロード処理がデフォルトでついていて、そのためのコネクタが汎用的に各種用意されている、というあたりに不安を覚えつつ、phpコネクタのソースコードを追ってみたところ……
簡単に見つかりました。容易に拡張子.phpがアップロード出来てしまいます(直接攻撃)。ほとんどのケースで、これは致命的な脆弱性でしょう。実際には、FCKEditorが置いてあるだけではダメで、phpのアップロードコネクタを有効にした場合のみの脆弱性ですし、config側で対応することもできますが…
/editor/filemanager/upload/php/config.php
$Config['Enabled'] = true ; // この機能を有効にしただけでアウト
あと、第三者にアップロードを許可しているのに、ファイルの中身をまったくチェックしていないので、例のIEのMIME-Type XSSはバリバリにオープンですし、同じく第三者がFlashをアップロードできるってことは、これまたXSSでしょう。ファイルアップロードは必ずホワイトリスト。これは鉄則です。
このケースでも、画像ファイルのみに限定して、その上でgetimagesize()等で、最低限のファイルの中身チェックを行うべきでしょう。
そもそも、アップロード処理がユーザ権限チェックをまったく通過しない、という設計はどうなんでしょうか? いわゆるWebアプリケーション脆弱性がなかったとしても、あるサーバのスペース・帯域を自由に第三者が利用できることになります。
こんなPHPバックエンドをそのまま使う人はさすがにいないだろうと信じたいところですが…
TinyD with FCKeditor というものがあったので、そちらも一応確認してみました。さすがに、アップロード処理にはXOOPSの権限チェックが入っていますが、やはり拡張子.phpがアップロードできる脆弱性はそのまま残っていました。(よく見たら、その部分の直前にFatalなtypoがあるので、意外とOKかもしれません
)
このモジュールの権限チェック部分については真面目に追っていないのですが、こんなに甘いチェックしかせずに、普通のユーザにアップロード許可を与えるのは問題あるでしょう。
他にも、$_FILES[]['name']がDocumentRootにそのまま格納されてしまう、という設計も問題ですし、ディレクトリ名などにXSSを埋め込めそうなのもマイナスです。safe_mode環境をまるっきり考慮していないのもなんだかなあ、という感じです。(この問題点はオリジナル/XOOPSモジュール共通)
ただ、FCKeditorのフロントエンドの作りはかなり良い感じですし、バックエンド部がやらなければならないことなんて、フロントに比べればほんのちょっとだけなので、PHP部分をまるまる作り直してみました。実際に作ってみた感想ですが、JavaScriptとPHPが入り組んでいるspawとは違って、本当に作りやすかったです。FCKeditorの設計が良いのでしょう。
ダウンロードはこちら。
http://xoops.peak.ne.jp/md/mydownloads/singlefile.php?lid=93利用法ですが、spawと同じく、common/の下に置く形になります。別途、uploadsの下に、fckeditorというディレクトリを作っておいてください。(パーミッションはApacheが書き込めるように。Apacheモジュール版PHPならもちろん777です。CGI版なら755でOKです。)
これに対応したpico (0.2) もリリースしておきます。