PEAK XOOPS - News in englishin japanese

Archive | RSS |
  
Poster : GIJOE on 2007-01-19 16:42:58 (7229 reads)

in englishin japanese
http://xoops.peak.ne.jp/md/mydownloads/singlefile.php?lid=92&cid=1
なぜか妙な人気のあるモジュールTinyDの後継であり、かつ、D3モジュールの模範生として作ってきたpicoですが、ようやく当初予定していた機能が実装出来たので、betaに格上げしてリリースします。

バージョン番号も、もうすぐ1.0だよ、という意味を含めて0.9まで一気に上げてます

このpicoですが、仕様が固まったからbetaに上げただけですので、ほとんどテストがなされていないのは同じです。有志のみなさんのテストとバグレポートを心よりお待ち申し上げます。

picoが安定版になった時点でTinyDのメンテナンスは終了とします。脅かすわけじゃありませんが、TinyDを使っている人は、どんなものか、一度目を通しておいてもよいかもしれません。

0 comments

Poster : GIJOE on 2006-12-14 12:49:55 (19224 reads)

in englishin japanese
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) もリリースしておきます。


Poster : GIJOE on 2006-12-02 06:09:16 (9668 reads)

in englishin japanese
d3forumのコメント統合のnativeモードを利用できるモジュールを作ろう、ということで、以前から予定にあった、TinyDの後継モジュールpicoを実装してみました。
もちろん、後継とは言っても、ソースコードなどには何ら関連性はありません。

D3モジュールの模範生、を目指して作ったモジュールなので、D3モジュールとは何かを知りたかったら、このソースコードを読むのが一番手っ取り早いかもしれません。(まだ、未実装部分も結構ありますが)

TinyDとの最大の違いは、もちろんD3であることですが、「フィルター群」という新しい概念も加わっています。TinyDのレディメイドなフィルターと違い、任意の順番で自在にフィルターを組み合わせることができます。自作フィルターの追加も簡単です。(フィルターファイルを作って、filters/ ディレクトリに突っ込むだけ)

従来のMyTextSanitizer関連やTextWikiだけでなく、Smartyフィルター、という怪しげなものも登場しています。要望が多かったので実装してみましたが、使い物になるかどうかは微妙かもしれません。

現時点で仕様はほぼ確定していますが、唯一、ページラップをどうするかで悩んでいます。ラップはwrapsでやってね、というのも手なのですが、TinyDで出来ていた混在がpicoで出来ない、というのも悔しいので、うまい処理がないか検討中です。

権限設定つき階層カテゴリーという要望も多かったので、これも追加しておきました。というより、d3forumのシステムをそのまま持ってきただけですが。

もう一つ、TinyDの時に多かった要望は、WYSIWYGエディタです。もちろん、なんらかのWYSIWYGエディタに対応はしますが、どうしても脆弱性の温床になりがちなのが悩ましいところです。いろいろと試してみて、問題のなさそうなものを選んでみたいと思います。

0 comments

Poster : GIJOE on 2006-12-01 17:43:30 (18896 reads)

in englishin japanese
とっくに差し替わっているのに今さらの報告で申し訳ないのですが、このサイトのコメントをd3forumのコメント統合に差し替えました。
このコメント機能を自分で使っていけば、それなりに良いインターフェースというのが自然と練られるものと期待しています。

d3forumコメント統合の使い方ですが、すでにXOOPSコアのコメント機能を使っているモジュールについて移行するのであれば、比較的簡単です。

(1) d3forumにおいて、専用の空のフォーラムを用意する
(2) d3forumの管理画面より、そのモジュールのコメントインポートを行う

この時点で、xoopscommentsテーブルのデータがd3forum内にツリー構造を保持したままコピーされます。また、(1)で用意したコメント統合用フォーラムには、「コメント統合時の参照方法」に自動的に値が入ります。(一部、手で修正する必要のあるモジュールもあります)

あとは、各モジュールのエントリに表示されるコメントを、X2コアのものから、d3forumのものに切り替える作業だけです。基本的にはすべてテンプレートの作業です。

(3) コメント投稿・表示部分のテンプレートを書き換える
(4) コメント数を表示する部分のテンプレートを書き換える

この(3)と(4)は、モジュール毎の対応が必要で、やや面倒です。

ドキュメントに用意したテキストを貼り付けておきます。

original:


<div style="text-align: center; padding: 3px; margin:3px;">
  <{$commentsnav}>
  <{$lang_notice}>
</div>

<div style="margin:3px; padding: 3px;">
<!-- start comments loop -->
<{if $comment_mode == "flat"}>
  <{include file="db:system_comments_flat.html"}>
<{elseif $comment_mode == "thread"}>
  <{include file="db:system_comments_thread.html"}>
<{elseif $comment_mode == "nest"}>
  <{include file="db:system_comments_nest.html"}>
<{/if}>
<!-- end comments loop -->
</div>


modified:

<{d3forum_comment dirname=d3forum forum_id=(number) itemname="id" subject=$title}>




mydownloads
mydownloads_singlefile.html

<{d3forum_comment dirname=d3forum forum_id=(number) itemname="lid" subject=$file.title|regex_replace:"/&nbsp;.*/":""}>

mydownloads_download.html

<{d3forum_comment_topicscount dirname=d3forum forum_id=(number) link_id=$down.id}>



myAlbum-P
myalbum_photo.html

<{d3forum_comment dirname=d3forum forum_id=(number) itemname="lid" subject=$photo.title}>


<{d3forum_comment_topicscount dirname=d3forum forum_id=(number) link_id=$photo.lid}>

myalbum_photo_in_list.html

<{d3forum_comment_topicscount dirname=d3forum forum_id=(number) link_id=$photo.lid}>



bulletin2
{dirname}_article.html

<{d3forum_comment dirname=d3forum forum_id=(number) itemname="storyid" subject=$story.title}>

{dirname}_item.html

<{d3forum_comment_topicscount dirname=d3forum forum_id=(number) link_id=$story.id}>


もちろん、最初からd3forumコメント統合に対応したモジュールであれば、このような面倒な手間は不要です。そしてその最初のモジュールである pico は明朝には用意できると思います。

0 comments

Poster : GIJOE on 2006-10-31 18:42:43 (8116 reads)

in englishin japanese
Cube2.1の互換性テストで必ずといって良いほどレポートされてしまうのが、mymenuによって実装された「一般設定」がfatal errorを起こす件です。

さすがにそろそろ直した方が良いと思い、D3モジュールでないmymenuでも、altsysを参照するように修正しました。TinyDの2.3betaに試験的に導入しています。TinyD 2.3では、altsysがなければ、「一般設定」も「ブロック管理」も表示されません。altsysを入れてください。

ただ、これに伴って、mymenuの導入にもう一つ手間が増えました。admin/index.php に、altsysを呼び出す以下のコードを挿入する必要があります。

挿入ポイントは、index.phpの作りにも依存しますが、cp_header.php や cp_functions.php の読込直後です。


// branch for altsys
if( defined( 'XOOPS_TRUST_PATH' ) && ! empty( $_GET['lib'] ) ) {
	$mydirname = basename( dirname( dirname( __FILE__ ) ) ) ;
	$mydirpath = dirname( dirname( __FILE__ ) ) ;

	// common libs (eg. altsys)
	$lib = preg_replace( '[^a-zA-Z0-9_-]' , '' , $_GET['lib'] ) ;
	$page = preg_replace( '[^a-zA-Z0-9_-]' , '' , @$_GET['page'] ) ;
	
	if( file_exists( XOOPS_TRUST_PATH.'/libs/'.$lib.'/'.$page.'.php' ) ) {
		include XOOPS_TRUST_PATH.'/libs/'.$lib.'/'.$page.'.php' ;
	} else if( file_exists( XOOPS_TRUST_PATH.'/libs/'.$lib.'/index.php' ) ) {
		include XOOPS_TRUST_PATH.'/libs/'.$lib.'/index.php' ;
	} else {
		die( 'wrong request' ) ;
	}
	exit ;
}

0 comments

« 1 ... 11 12 13 (14) 15 16 17 ... 37 »
Login
Username or e-mail:

Password:

Remember Me

Lost Password?

Register now!