助けて!まこと先輩
返事は1時間もたたないうちに来た。
まことです。
この場合の対策程度なら調べればすぐ分かりそうなもんだけど……。まあいいや。あと、きっとログイン名の方もSQLインジェクションできるだろうからそっちも忘れずに。
▼シングルクオーテーションのサニタイジング
・データベースの特殊文字はたくさんあるので、独自のサニタイジング処理は大変
・Perlで書かれているということなので、DBIインターフェイスのquote()関数を使うといい
▼入力チェック
・そもそもパスワードに「'」が使われることがないなら入力チェックでエラーを返してもよい(パスワードではシングルクオーテーションも使いたいけど)
・ログイン名の方はエラーにしてしまって大丈夫だと思う
何だか「ちょっと『教えて君』みたいになってしまったかもしれない」と星野君は思った。「入力値に不正文字列があったらSQL文を処理しない」というアドバイスは「なるほど」と理解できた。取りあえず対策を聞くことはできたので、まこと先輩にお礼のメールを出してから、さっそくソースの修正作業に掛かった。
Webアプリ改造計画発動-SQLインジェクション編
まず、星野君にとって分かりやすかったログイン名の入力チェックから対策を行った。SQL文が記述されている個所を見つけ、半角英数字のみを許容するようにしたのだ。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
きっとこれで大丈夫だろう。これでログイン名に特殊文字は入らないはずだ。パスワードに対しては、ログイン名と併せてサニタイジングの対策を行った。まこと先輩のメールに書いてある方法でサニタイジングをすれば確実だろう。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
もちろん、前回まこと先輩に教わったとおり、これらの作業はサーバ上ではなく手元のPCですべて行った。これらの設定を行った後、SQLインジェクションができないことを確認した。
最後に星野君は、このWeb管理ツールを使ってWebの更新を行っている人がこれまでどおり通常の作業を行えるかをチェックしておいた方がいいかなと思った。星野君は広報担当の町田さんにお願いすることにした。
星野君 「町田さん、ちょっとWeb管理ツールにログインできるか試してもらっていい?」
町田さん 「いいけど……。はい、ログインしたよ」
星野君 「よしっ!ありがとう」
町田さん 「え……?」
Web管理ツールのログイン部分にあったSQLインジェクションの脆弱性を修正した星野君。しかし、この後、ログイン機能以外の修正や改ざんされていないかのチェックに追われたのだった。
次回予告:
1人でWeb担当を頑張る星野君。今後、Web担当の業務が本格始動したときに仕事をさばき切れるのだろうか……。
Profile
杉山 俊春(すぎやま としはる)
三井物産セキュアディレクション株式会社
テクニカルサービス事業部検査グループ
コンサルタント
セキュリティコンサルタントとして、主にWebアプリケーションのセキュリティ検査などに従事している。大手就職活動支援サイト、ショッピングサイトなどの検査実績を持つ。
Copyright © ITmedia, Inc. All Rights Reserved.