SQLインジェクションとは
SQLインジェクションとは、 操作にSQLと呼ばれる言語を用いるタイプのデータベースを使用するアプリケーションに対し、 その入力に本来入力としては使われることが想定されていないSQL文を挿入すること(injection - インジェクション)で、 データベースに不正な操作を加える攻撃方法のことです。
SQLインジェクションに対する脆弱性は、 ユーザーの入力をデータベースへの問い合わせの一部として使用するアプリケーションにおいて、 入力された値のチェックやSQL文のメタ文字(特殊な意味を持つ文字)のエスケープ(メタ文字として処理されないよう適切な文字列に置換すること)を行っていなかったり、 それらが不十分であったりする場合等に発生します。 このような場合、 データベースに問い合わせる命令文の中に不適切な文字列が含まれるような入力を与えると、 データベースを利用しているプログラムに不正な動作をさせることが可能となってしまいます。
近年のWebサイトは、 データベースと連携して動的にページを生成するものが非常に多くなっており、 SQLインジェクションはWebサイトへの攻撃方法として、 代表的なものの一つになっています。 SQLインジェクションによる被害の実例としては、 Webサイトの改ざんや顧客情報の漏えい等が多数報告されており、 適切な対策が施されていない場合、 攻撃を受けた際の影響は深刻なものになる可能性があります。
SQLインジェクションの対策としては、 プリペアドステートメントという仕組みを利用するのが比較的容易で確実です。 プリペアドステートメントでは、 パラメータとして与えられた部分に適切なエスケープ処理が自動で行われるため、 SQLインジェクションによる、 本来意図していないSQL文の実行を防ぐことができます。 また、万一攻撃を受けた際の被害を抑えるために、 アプリケーションに与えるデータベースの操作権限は、 必要最小限のものにしておくことが望ましいと言えます。
参考:
"安全なSQLの呼び出し方"
http://www.ipa.go.jp/security/vuln/documents/website_security_sql.pdf