- 2015年8月3日
- 社員日記
個人情報の宝庫 データベースを狙うテロ行為「SQLインジェクション」を知ろう。
あどうもです。
某カレー屋の3辛を舐めていた、もょもとです。
あれめっちゃ辛いすね。
前回の記事では、世界で最も使用されている言語 としてデータベース言語のSQLをご紹介しました。世界で最も使用されている言語「SQL」
今回は、そのSQLのセキュリティに関するお話です。
身の毛もよだつ、口に出すのも恐ろしいお話です。
これを読めば、あなたも第二の稲川になれること間違いなし。
コギャルやイケメンをヒーヒー言わせよう。
SQLインジェクション
SQLは、みなさんの個人情報が入っているデータベースを操作する際に使用されますが、そんなSQLを利用して情報を抜き出したり、不正に操作される攻撃SQLインジェクションをご存知ですか?
怖いですね~データベースは個人情報とズブズブの関係ですからね。
データベースは与えられた命令を実行します。
どんな命令でも忠実に実行します。
例えそれが悪意のある命令であっても。
データベースは知りません、その命令がご主人様のものなのか、知らないおじさんのものなのか。
Let’s SQLインジェクション
ではWEBサービスにログインする時を例にあげてみてみましょう。
ログインIDとパスワードを入力してログインするケースをイメージして下さい。
この時、以下のようなSQLで皆さんが入力した内容のユーザーが存在するか、データベースに問い合わせるとします。
赤字の部分にログイン画面でユーザーが入力した内容が入ります。
翻訳すると
といったような内容になります。
では、試しにこのような文字列を入力してみましょう。
‘ OR 1=1–
なんじゃらほいですね。
するとSQLがこうなります。
翻訳すると
ログインIDとパスワードの部分だけが変わるはずなのに、全然違う意味のSQLになってしまいましたね。
本来ならメールアドレスとパスワードが一致した時に初めてログインの認証が通るはずですが、このSQLだと1は1だからOKとなり、問答無用で認証が通ってしまいます。
つまりどういうこと?
SQLはデータベースを操作・命令するための言語です。
データベースの中の情報を検索したり、変更したり削除したり条件をつけたりするために、様々な文法が用意されています。
そして、WEBアプリケーション側では、変数を用いて、ユーザーが入力した内容を代入するSQLの文を準備しています。
攻撃者はデータを削除してやろうと思ったら、WEBアプリケーション側でデータベースにアクセスする為にSQL文を作成しているであろう箇所に対して、データを削除するSQL文が作られるように攻撃するのです。
そして、本来とは違う意図していない処理を発生させるのです。
攻撃は今回のような入力フォームであったりアドレスバーから行われます。
対策
このような攻撃に対して、WEBアプリケーション側で対策を行いましょう。
そのためには、例え攻撃されても、SQLが影響を受けないようにしなければいけません。
有効な方法としてエスケープ処理があげられます。
SQLにおいて特別な意味をもつ記号を、何でもない文字に変換させます。
こうすると、別の意味のSQLに書き換えられるのを防ぐことができます。
「ラストナンバー行くぜ!!」
どうでしたか?
怖いですね~。
後は、どれだけ怖く話せるかです。
ある有名人の方が言っていました、何かについて話す時、まず3人に話せと、そうすれば自分の頭の中で整理されて上手く話せるようになると。
これで、もう怪談話の時に自分の番が来ても怖くありませんね。
もょもとでした。