週末にちょっとWebアプリケーションのセキュリティを勉強して、初歩的な知識は身に付けた。まこと先輩のアドバイスどおり「Webアプリケーション、検査」でいろいろ調べたのだ。Webアプリケーション検査ツール類はまだ試してはいないが、Webアプリケーションに対する攻撃というものが何となく分かったという程度。
勉強する前から少しは聞いたことがあったが、やはりWebアプリケーションのセキュリティというと「SQLインジェクション」が注目されているようだ。星野君は自分の会社のWeb管理ツールが安全かどうかを試してみた。
星野君 「うわっ……」
なんと、あっさりログイン成功。星野君がやったのは、
ユーザーID:admin パスワード:'or '1' = '1(調べて出てきた検査パターン) |
を入力しただけだ。
自分の管理下にないWebアプリケーションに対して検査パターンを入力してはいけません。不正アクセス禁止法に抵触する恐れがあります。
本稿で説明した内容を利用した行為による問題に関しましては、筆者ならびに三井物産セキュアディレクション株式会社およびアイティメディア株式会社は一切責任を負いかねます。ご了承ください。
Webアプリケーションのセキュリティに詳しいWebサイトで調べた情報によると、
SELECT * FROM user WHERE userid='[ユーザーID]' AND password='[パスワード]' |
というSQL文がWebアプリケーション内部で実行されている場合、星野君が行った入力により
SELECT * FROM user WHERE userid='admin' AND password='' or '1'='1' |
というSQL文が実行される。
ということらしいのだが、星野君には何のことだかよく分からなかった。参考にしたWebサイトでは「対策としてシングルクオーテーションをサニタイジングする」と書いてあったけれど、具体的には何をすればいいのだろう。データベースを使うようなWebアプリケーションを作ったことはないし。でも、これは何か対策をしなくてはいけない。
星野君 「どうしよう……」
星野君には何が問題であるのかさえ分からない。仕方がないので、まこと先輩に聞いてみることにした。そういえば、まこと先輩の連絡先を教えてもらっていなかったので、また山下君にコンタクトを取った。
星野君 「また、Webアプリのセキュリティのことで聞きたいんだけどー」
山下君 「お、今度は何?」
星野君 「SQLインジェクションなんだけどね」
山下君 「ああ、一時期結構騒がれたね。何?勉強してんの」
星野君 「いや、うちのサーバに置いてあったWebアプリで試したらログインできちゃって……」
山下君 「えぇ!!それはまずくない!?そのWebアプリっていまもWebサーバに置いてあるの??」
星野君 「さっき教えてもらった方法で一応外部からアクセスはできないようにしたんだけど、これは直さないといけないって思って。けど、どうすればいいか分かんなくて……」
山下君 「俺もよく分かんないな。まこと先輩にまた聞いてみるか……。まこと先輩に直接聞いた方が早いだろうからメールアドレス教えておこうか?」
星野君は山下君からまこと先輩のメールアドレスを教えてもらうと、早速メールを出した。
Copyright © ITmedia, Inc. All Rights Reserved.