これまたお客さんのサイト開発で得た知識です。
昨今webサイトのセキュリティについて、要求レベルが上がってきており、開発者側もコストがかかるようになってきています。ここでは主にwebサイトのCGIよりユーザより入力されるデータについて気をつけるべき点を説明します。
1.テスト方法
FirefoxプラグインのTamperDataというものを使います。
これを使うとsubmit直前のCGI入力データを色々書き換えることができます。
デバッグできると同時にハッキングにも使えますね。
入力データにjavascriptとかを埋め込んだり、ダブルクォーテーションなどが混ぜてHTMLタグの崩れによる脆弱性などを調べます。
・よく使われるテストデータ
<script>alert();</script> : 入力データにjavascriptを受け付けられるか
“> <script>alert();</script> : ダブルクォーテーションが影響しないか?
2.開発ポイント
以前はphpの場合、strip_tagsとかいう関数で入力されたデータからHTMLタグ(<>で囲まれた文字列)を取り去ってしまえば良かったのですが、昨今ブログなどで顔文字やHTMLタグを入力として受け付ける必要性が出てきて、対応が厄介になってきています。
ポイントは
(1) データはhiddenの際、escapeして保持する。
(2) 入力データは認められたタグ以外は切り取る。
phpの場合、strip_tagsとかだと、顔文字とかもタグ として削除されてしまうので、独自の関数が必要になります。
(3) データ自体はescapeしないで保存する。
escapeしたままDBに保存すると、再編集の際などの処理が厄介になるので、そのまま保存します。(例: <++> を <++> として保存しない)
(4) データをweb表示する際は、escapeして出力する。
ここでいうescapeとは、phpのhtmlspecialcharsという関数をさしています。
私は開発にSmartyを使っていますが、pluginのescapeという関数は(4)をとても簡単に実現してくれるので役立っています。(2)についてはオリジナルを作ったのですが、気が向いたら公開することにします。
携帯のセキュリティチェックの際は、これまたFirefoxのUser Agent Switcherが便利です。