UPDATE:2016.9.26
- CATEGORY
- 仕事のこと
ネット上でのセキュリティについて
極めて稀ではありますが個人情報が漏えいした、などというニュースを見ることがあります。データベースから情報を抜き取る攻撃の一つにSQLインジェクションという手法があります。
しっかりとセキュリティ対策を施されていない場合に起こり得るのです。
例えば何かの検索フォームがあったとして、そこに文を記載できるテキストエリアがあったとしましょう。
入力された内容は当然SQL文を介してデータベースに問い合わせが行き情報が検索されるのですが、そのSQL文を誤作動させ、意図しないデータを抜いてしまう手法がSQLインジェクションです。
手法としてはシングルクォテーションやダブルクォテーションを適所に入れて誤作動させるのが一般的です。
「SELECT id FROM DBtable WHERE name = ‘入力内容’;」 のような文があったとして、通常であれば「入力内容」で入力した「name」の内容で検索したとして、それに対応する「id」が出力されますが、「’入力内容’」の部分に「’ OR name LIKE ‘%a%」のように「’」を一つ入れることで、始めの「name = ‘」を「name = ”」空と認識させ、そのあとに「OR name LIKE ‘%a%」のような文を挿入し結果「SELECT id FROM DBtable WHERE name = ” OR name LIKE ‘%a%’;」といった「name」に「a」を含むデータを全て抜き取るという方法が一つあります。「LIKE ‘%a%’」は検索された「name」データ内に「a」が含まれるものがすべて該当するというワイルドカード処理です。
腕のあるクラッカー(ハッキングする人物)であれば上記よりも複雑な手法を使い抜き取ることも当然可能でしょう。
一般的な対策としては、入力された文字列をエスケープして「’」を記号としてではなく、文字として取り扱う処理を施すのですが、それを忘れたか、知らない人がコードを作成すると簡単にデータを抜かれてしまいます。
一般の人はほとんどデータベースを扱うことなどはないので、知らなくても良い知識ではありますが、データベースを扱うようになればセキュリティ上最低限必須な知識ではあります。
他にもセキュリティ上問題を起こさせる攻撃方法がいくつかあります。
皆さんも気を付けてください。
ちなみに良く悪意を持ってサイトを攻撃する人を「ハッカー」と呼びますが、ハッカーは単純に知識が豊富で侵入することもあるかもしれませんが悪意を持っていない人たちのことを言い、悪意のある人のことは「クラッカー」と呼ぶそうです。