SQLインジェクションについて

SQLインジェクションとは

 インジェクション攻撃とは、コンピュータプログラムが無効なデータを処理した際に出現するバグを、攻撃者が悪用して不正な命令を実行する攻撃。 SQLインジェクションとはアプリケーションのセキュリティ上の脆弱性を突いて、本来のSQL文に攻撃者のSQL文が挿入され、アプリケーションが想定しないSQL文を実行することで、データベースに不正に操作する攻撃、またはその脆弱性のことです。  

例えばあるログインフォームにおいて、DBのテーブル名をuser_info, ユーザー名とパスワードを2つのカラムもつとしたとき、 ユーザーが入力したユーザー名とパスワードのペアがデータベースに存在するかどうかをチェックするときに生成されるSQL文は

SELECT * FROM user_info WHERE name = 'user1' AND password = 'user1';

となるが、攻撃者は以下のような入力をします。

SELECT * FROM user_info WHERE name = 'user1' AND password = '' OR 'A' = 'A';

これは(password = ”)とすることで、一旦処理を終わらせ、ORによって(’A’=’A’)という必ず成り立つ条件式を入れることで、WHERE句全体が真となり、本来のパスワードを入力することなく、ユーザーとしてログインできてしまいます。

 このように不正に侵入されることで、連携しているデータベースなどに影響があります。

対策

 根本的解決策としてエスケープ処理の実施があります。

エスケープ処理の実施

  特別な意味を持つ記号文字が普通の文字として解釈されるようにする

 そのほかにも、エラーメッセージを非表示にする、データベースアカウントの権限見直しなどがあります。  

 IPAがSQLインジェクションについてまとめたPDFのURLです。より詳しく知りたい場合は参照してください。 SQLインジェクション対策について