はじめに
エンジニアが携わるセキュリティに関する問題として、一番最初に目にするのは、SQLインジェクション問題ではないでしょうか。
そこで、SQLインジェクション問題とはどういったもので、どうすれば対処できるか? ということについてまとめてみました。
SQLインジェクション問題とは
SQLインジェクションとは、Webアプリケーションに対する攻撃の一種です。
SQLの脆弱性を突き、データベース上の情報を盗み取ったり、改ざんしたりすることが可能となります。
もし企業が会員の顧客情報を流出してしまったら、それだけで倒産となる可能性も十分にありうる時代です。
セキュリティの観点からいって、必ず対処しておくべき問題のひとつといえるでしょう。
具体的な例
以下のようなSQL文で考えてみます。
select * from 会員テーブル where 会員番号='○○';
このとき、会員番号は1,2,3..というような整数の値を取ることにします。
select * from 会員テーブル where 会員番号='1';
1つの整数につき、1つのデータのみが該当するので、常に0件か1件の答えが返ってくるはずです。
システムとしては、そのように想定されて作られています。
しかし、ここで以下のような入力をおこなったとします。
select * from 会員テーブル where 会員番号='1' or 会員番号 > '0';
すると、会員番号が1もしくは0より大きい数字をデータベースより探すことになります。
もちろん、データベース上のすべてのデータが該当することになります。
そのため、システムとしては予期せぬエラーが発生していることになり、ストップしてしまう可能性があるのです。
エスケープによる対処方法
SQLインジェクション問題を解決するためには、SQL文に一工夫を加えることが必要です。
select * from 会員テーブル where 会員番号=?;
上記のような書き方をすると、特殊記号である『'』や『;』がデータベースの読み込みに使われることなく、そのままの文字列としてみなされます。
結果として、不正な入力を防ぐことが可能となります。
最後に
データベースのセキュリティを高めることは、エンジニアとして重要な仕事です。
一つずつ対処法を覚えていき、より強固なセキュリティを作り出していきましょう。