今のところjavascriptでチェックしているだけなのですが
サーバーサイドでもチェックした方がよいでしょうか?
必須です。
ちょっとプログラムを書くことができる人なら、Web サーバへ直接、データを送信するプログラムは書けます。JavaScript でのチェックは、あくまでもブラウザを利用する人に対して、利便性(誤った入力である事を、Web サーバに送信して応答を待つことなく、利用者に伝えることで、応答性を向上させている)を提供しているに過ぎません。
そして、出力時にもチェックが必要でしょうか?
原則は、
です。
この辺の話は、通称「徳丸本」と呼ばれる下記の書籍がバイブルとしてよく紹介されます。原理的な事からきちんと書かれている本ですので、まずはこれで勉強してみて下さい。
体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
> サーバーサイドでもチェックした方がよいでしょうか?
必要です。
チェックするJavaScriptが含まれているコンテンツ以外から投稿された場合、サーバで防ぐしかないからです。
> そして、出力時にもチェックが必要でしょうか?
投稿時にサーバで十分にチェックされていれば、出力時にチェックする必要はありません。二度手間だからです。
サーバ側のチェックですが、PHPが使えればstrip_tags関数を使って正規表現を使わなくても除去できます。
http://labs.uechoco.com/blog/2007/12/phpstrip_tagshtml.html
前の回答者さんが答えているように
サーバサイドでチェックは必要です。データ保存前に必ず行います。
出力時は、よっぽどのことがない限り簡易的なものでよいです。
必要ならばチェックをいれてもいいです。
パッケージのブログシステムなどは、基本両方入っていることが多い印象ですが。
チェックする項目ですが、作りたいものに応じて取捨する形になります。
セキュリティ的にはscriptタグなどjavascriptとフォームタグを排除すればOKです。
見栄えタグは正規表現で細かく調整します。こちらはやりだすと作業大変です。
・スクリプトタグは悪さするので必ず無効、ただしブログパーツなどscriptを使わざるを得ない場合はその表記だけ生きるように設定する
・onclick、onmouseoverなどもいろいろ出来るので極力無効に。
・コメントアウトタグは排除し忘れることが多いので要注意。全て無効に。SSIも当然排除。
・閉じタグを自動挿入するなど(セキュリティ的にはやらなくても問題ない)
・フォームタグも無効に
タグを使うとどういったことが出来るようになるのか考え、それはやらせていいのかどうか、ひとつずつ上げていって取捨するのがいいと思います。
絶対に必要です。
簡単にソースコードを解析すれば
直接命令を送ることができますので。
サーバ側の言語によりますが
例えばphpでしたら
http://rasukaru55.sitemix.jp/tag_tori.php
が参考になるかもしれません。
あと
サーバテロの技法という本が
私は大変ためになりました。
サイバーテロだったかな。
他にも攻撃の手法をいろいろ紹介されていてそれの防御方法がのっていました。
ヤバいコードを実行させない方法として、許可するHTMLタグを別タグにしてしまうという方法があります。
例えば原文で *RED* と書いたら、出力時にはで font color のタグに置き換えるとかです。
もちろん原文の括弧は必ずHTMLエスケープしないと意味ないです。
さらにいうなら原文に直接書くのではなく許可タグを文字ではなくビジュアルに確認できるといいですね。
アメブロのブログエディターみたいな感じならエンドユーザーの負担も無いでしょう。