asahi.com: データベースを攻撃、外部から支配 カカクコムHP事件 - 社会

 関係者によると、データベースは「ある範囲の情報を探す」「条件に合ったデータを取り出す」といったコンピューター言語「SQL」で操作する。今回の攻撃は「SQLインジェクション」と呼ばれる手法を応用。攻撃者が利用者のふりをしてデータを入力し、戻ってきたエラーメッセージなどを解析しながらシステムを把握して、データベースを支配下に置いていったとみられる。

イマドキ SQL injection ごときで陥落しちゃうサイトって…。つまりウェブアプリケーション開発者ならば誰もが注意を払わなければいけない基本中の基本事項が守られていなかったというわけで。カカクコムは Microsoft IIS + ASP で稼動していたので、PerlPHP と違って標準で変数サニタイズエスケープ用関数がない ASP(サーバサイド VBScript) は、注意深くプログラミングしないとヤラれやすい。
ちなみにサニタイズが全くされていない ASP を使っていてなおかつバックエンドで DB が動いているサイトで、例えば xxx.asp?q=123456' のように引数へ SQL のクオート文字をくっつけてやると、ご丁寧に Jet や OLE DB ドライバがエラーメッセージに SQL 文の一部を表示してくれちゃったりする場合があり、内部の SQL クエリが推測されやすくとっても危険だったりする。
オレは Perl5 互換の正規表現が使える BASP21 の Replace メソッドを使って、Request メソッドでゲットした引数に対して "s/(無効化する特殊文字)//g" みたいな処理をしたり、IsNum メソッドで引数の汚染チェックを行う処理を入れるようにしている。
参考:
http://www.ipa.go.jp/security/awareness/vendor/programming/a02_01.html
サニタイズ | 鳩丸ぐろっさり (用語集)