FreeTextBox
ちょっとFreeTextBoxで遊んでみました(・∀・)
http://freetextbox.com/
Community ServerやDotNetNukeなんかで使われているものですが。
使い方は簡単で、aspxに以下のような記述をするだけです。
<%@ Register TagPrefix="FTB" Namespace="FreeTextBoxControls" Assembly="FreeTextBox" %>
<FTB:FreeTextBox id="FreeTextBox1" OnSaveClick="SaveButton_Click" runat="Server" SupportFolder="~/FreeTextBox" Language="ja-JP" />
で、FreeTextBox1.Textで編集内容のHTMLが取得できます。
これでリッチな入力も簡単にできるようになるわけですが。
ただ、FreeTextBox自体はHTMLの無害化機能は持ってないんですね。
そのため、以下の入力が通ってしまいます。
<a href="javascript: alert( document.cookie )">クリック</a>
FreeTextBox1.Textの内容をそのまま表示したりするとXSSの危険があるわけで、無害化処理を入れてあげる必要があります。
Community Serverなんかは、当然ちゃんと対策がしてありますが。
データベースを覗いてみたら、テーブルにBody列とFormattedBody列があって、FormattedBody列には無害化されたHTMLが入っていました。
入力の段階で無害化したデータを作っているんですね。
後、FormattedBodyは無害化だけではなくて、Emotionとかについても変換後のデータを入れておく用途になっているようですが。
はてなで言えば、はてな記法をHTMLに変換したデータを保存しておくような用途ですね。
で、無害化について同じようにするのであれば、タグと属性について許可されたものだけを通す様な処理を用意しろと言うことですね(´ω`)