WYSIWYG Editor for BB-Code

Date 2006-08-11 05:53:09 | Category: XOOPS

in englishin japanese
HTTP経由で入力された文字列の特殊文字(<>&'")を、エスケープしないでブラウザに送出する、というのは基本的にはやってはいけないことです。

ゲストなり信用できないユーザの投稿をそのように表示すれば、単純にScriptInsertion脆弱性ですし、管理者や信用できるユーザだけに許可したとしても、きちんと対策しなければCSRFとのコンビネーション攻撃の対象になるだけです。

その一方で、ブラウザのWYSIWYG Editorを利用したい、という需要は常にあります。ブラウザのWYSIWYG Editor機能を利用したいが故に、本来のエスケープ処理を外してHTMLを許可する、なんてHack例も多く見られますが、これは当然、「わざわざ穴を開けている」ことに他なりません。

HTMLを許可せずに、WYSIWYGなエディタが使えれば良い
転じて
BB-Codeを直接解釈するWYSIWYGエディタ

これこそが、理想的な入力環境でしょう。

ところが、現実にはそう簡単ではありません。というのも、ブラウザのWYSIWYGエディタを作ったことがあれば判ると思いますが、この手のWYSIWYGエディタはブラウザの機能として提供されたものを利用しているに過ぎないからです。

「ブラウザ依存のないWYSIWYGエディタが欲しい」

なんて要望もたまにみかけますが、そんなのは構造的にあり得ないことなのです。IEとFirefoxでは、WYSIWYGエディタ用として提供されている機能が違うのですから、使える機能も当然違ってきます。

もちろん、クライアント(=ブラウザ)を自分で作る、ところまで面倒を見れば話は別です。でも、それが相当に大変な作業であることは簡単に想像できるでしょう。

相反する2つの要望

「ブラウザのWYSIWYG機能を利用するにはHTMLしかない」
「XOOPS側としてはHTMLをエスケープしたい」

を両立するとなれば、自ずと回答も限られます。BB-Code - HTMLの相互変換フィルターを用意するしかないでしょう。編集時にはBB-CodeをHTMLに変換したものをtextareaに渡し(もちろんエスケープは行う)、登録時には、HTMLをBB-Codeに変換する。

ここで問題になるのが後者であることは言うまでもありません。WYSIWYGエディタに用意された装飾機能は多いので、BB-Codeで表現しきるのはとても無理でしょう。そのため、以下の方法を採用することになると思います。

- BB-Codeを拡張する (Cube 2.1なら簡単?)
- WYSIWYGエディタ側を制限する

それと、BB-Codeに変換しきれないHTMLはそのまま残しておく方が良いかもしれません。そのまま残しておいても、表示時にはエスケープされるので脆弱性には直接つながりませんし、どのHTMLがBB-Codeに変換されなかったかをすぐさま知ることができるのは大きなメリットです。

まだまだアイデア段階にすぎませんが、これを実装することで、現在のWYSIWYGエディタ禍と呼べる状況が改善されれば良いのですが。
(悪気がないのは判るのですが、穴だらけのWYSIWYGエディタを同梱して、「便利でしょ」とか言われてもねえ……)




You can read more news at PEAK XOOPS.
http://xoops.peak.ne.jp

The URL for this story is:
http://xoops.peak.ne.jp/md/news/index.php?page=article&storyid=349