誰でもWeb管理画面に入れる気前のいい会社星野君のWebアプリほのぼの改造計画(2)(4/4 ページ)

» 2005年11月19日 00時00分 公開
[杉山俊春, Illustrated by はるぷ三井物産セキュアディレクション株式会社]
前のページへ 1|2|3|4       

助けて!まこと先輩

 返事は1時間もたたないうちに来た。

まことです。

 この場合の対策程度なら調べればすぐ分かりそうなもんだけど……。まあいいや。あと、きっとログイン名の方もSQLインジェクションできるだろうからそっちも忘れずに。

▼シングルクオーテーションのサニタイジング

・データベースの特殊文字はたくさんあるので、独自のサニタイジング処理は大変

・Perlで書かれているということなので、DBIインターフェイスのquote()関数を使うといい

▼入力チェック

・そもそもパスワードに「'」が使われることがないなら入力チェックでエラーを返してもよい(パスワードではシングルクオーテーションも使いたいけど)

・ログイン名の方はエラーにしてしまって大丈夫だと思う


 何だか「ちょっと『教えて君』みたいになってしまったかもしれない」と星野君は思った。「入力値に不正文字列があったらSQL文を処理しない」というアドバイスは「なるほど」と理解できた。取りあえず対策を聞くことはできたので、まこと先輩にお礼のメールを出してから、さっそくソースの修正作業に掛かった。

Webアプリ改造計画発動-SQLインジェクション編

 まず、星野君にとって分かりやすかったログイン名の入力チェックから対策を行った。SQL文が記述されている個所を見つけ、半角英数字のみを許容するようにしたのだ。

if($userid !~ /^[\da-zA-Z]+$/){&error('入力が不正です');}

 きっとこれで大丈夫だろう。これでログイン名に特殊文字は入らないはずだ。パスワードに対しては、ログイン名と併せてサニタイジングの対策を行った。まこと先輩のメールに書いてある方法でサニタイジングをすれば確実だろう。

my $dbh = DBI->connect("dbi:Pg:dbname=[DB名]", "[DBユーザー]", "[パスワード]") or die;
$userid = $dbh->quote($userid) or die;
$password = $dbh->quote($password) or die;

 もちろん、前回まこと先輩に教わったとおり、これらの作業はサーバ上ではなく手元のPCですべて行った。これらの設定を行った後、SQLインジェクションができないことを確認した。

 最後に星野君は、このWeb管理ツールを使ってWebの更新を行っている人がこれまでどおり通常の作業を行えるかをチェックしておいた方がいいかなと思った。星野君は広報担当の町田さんにお願いすることにした。

星野君 「町田さん、ちょっとWeb管理ツールにログインできるか試してもらっていい?」

町田さん 「いいけど……。はい、ログインしたよ」

星野君 「よしっ!ありがとう」

町田さん 「え……?」

町田さんがログインできて喜ぶ星野君

 Web管理ツールのログイン部分にあったSQLインジェクションの脆弱性を修正した星野君。しかし、この後、ログイン機能以外の修正や改ざんされていないかのチェックに追われたのだった。

次回予告:

 1人でWeb担当を頑張る星野君。今後、Web担当の業務が本格始動したときに仕事をさばき切れるのだろうか……。

まこと先輩のWebアプリ・チェックポイント!

まこと先輩?

Check!
ディレクトリごとに適切なアクセス制限を行う

ディレクトリ名、ファイル名を推測されて外部から見られてはいけないコンテンツを閲覧される恐れがある

Check!
WebアプリケーションでSQL文を実行する前には必ずサニタイジングを行う

SQL文を含んだ入力がなされた場合、任意のSQL文を実行されてしまう可能性がある。SQL文で意味を持つ文字について見直す必要がある


Profile

杉山 俊春(すぎやま としはる)

三井物産セキュアディレクション株式会社
テクニカルサービス事業部検査グループ
コンサルタント

セキュリティコンサルタントとして、主にWebアプリケーションのセキュリティ検査などに従事している。大手就職活動支援サイト、ショッピングサイトなどの検査実績を持つ。



前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。