Injection)とは、アプリケーションのセキュリティ上の不備を意図的に利用し、アプリケーションが想定しないSQL文を実行させることにより、データベースシステムを不正に操作する攻撃方法のこと。その攻撃を可能とする脆弱性のことである。(inject)」されることから、「ダイレクトSQLコマンドインジェクション」もしくは「SQL注入」と呼ばれることもある。外部リンク原理編集アプリケーションが入力値を適切にエスケープしないままSQL中に展開することで発生する。次のようなSQLを発行することを考える。いう文字列を与えた場合を考えると、SQL文は次のように展開される。't';このSQL文では条件が常に真となるため、nameカラムの値にかかわらず、全レコードが選択される。このような攻撃は、入力値が1つだけのものには限られない。これを応用したものに、SELECTの条件式にデータベース内の情報を確認するようなサブクエリーを含ませ、その抽出の成否によって本来参照することのできないテーブル名などのデータベース内の情報を知るといった、ブラインドSQLインジェクションと呼ばれる手法も存在する[1]。「テーブル名の1文字目がaのテーブルは存在するか?」「aで始まり2文字目がbのテーブルは存在するか?」などの情報を確認するサブクエリーを含め、その抽出の成否を丹念に集めていけば、テーブル名や項目名を確認できる。複数のSQL文を注入することによるデータの破壊や改竄、ストアドプロシージャを実行されることによる情報の漏洩や改竄、OSコマンドの実行などを引き起こすこともできる場合がある。SQLインジェクションは、入力値を適切にエスケープすることで防ぐことができる。いう値を持つレコードが選択される。いう文字リテラルとして認識される。''t';ただし、データベースシステムによっては、単一引用符以外の囲み文字を用いて文字列リテラルを示すことができるものが存在する。MySQLでは動作モードによっては二重引用符を文字列の囲み文字として使用可能である[2]。このような環境下で、上記のようなSQL文の生成を行うプログラム中で二重引用符を囲み文字を用いているなら、二重引用符をエスケープする必要がある。他には、文字列リテラル中の単一引用符を表現する方法が複数存在するものもある。MySQLやPostgreSQLのバージョンや設定次第では、エスケープ文字としてバックスラッシュを使用して特殊文字を表現することが可能である。(注:047は単一引用符の8進表記)という文字列が文字列リテラル中の単一引用符を表すことになる。このようなデータベースシステムでは、単純に単一引用符を二重化するだけではSQLインジェクション対策としては不充分である。いう文字列を与え、そこに含まれる単一引用符を単純に二重化すると、上述のSQLは以下のように解釈される。--';二重化された単一引用符のうち、前者は前置されたバックスラッシュと合わさって文字列リテラル中の単一引用符を意味することになり、後者は文字列リテラルの終端を意味することになる。以降がコメントと見なされれば、このSQLの条件は常に真となり、SQLインジェクションが成立することになる。バックスラッシュもエスケープを必要とする。文字コードによっては2バイト目にバックスラッシュが含まれる文字を有するものが存在し、エスケープ処理を行うライブラリによっては日本語をうまく扱えないために、前述のようなエスケープシーケンスとしてバックスラッシュが機能することもありえる。言語毎に用意されたバインド機構の利用編集SQLインジェクションを防ぐには、入力値を適切にエスケープできればよい。前節に挙げたように、入力値を適切にエスケープすることは、それほど単純に行えるわけではない。データベースシステムやライブラリによっては、バインド機構と呼ばれる仕組みを用いてエスケープ処理不要で安全にSQLを発行する方法が設けられているものがあり、対策もれを防ぐ上で有用である。同年6月にクラブツーリズムを含む14社への不正アクセスの疑いで中国人留学生が逮捕された。手口は公表されていないが、SQLインジェクションによるものであるという説がある。クラブツーリズム事件の犯人は価格.comへの不正アクセスも行っていた。クラブツーリズム事件と同一犯2005年11月に発生した、ワコールオンラインショップのクレジットカード情報を含む個人情報漏洩2005年11月に発生した、キッズオンラインのアカウント情報漏洩2006年1月に判明した、スカイソフトのクレジットカード情報を含む個人情報漏洩スカイソフトは閉店へと追い込まれた。過去に設置された不正プログラムを経由して不正アクセスが行われた疑いがある。過去に設置された不正プログラムを経由して不正アクセスが行われた疑いがある。Networkの個人情報漏洩に始まる、ソニーグループの個人情報漏洩。2013年4月に判明した、エクスコムグローバルのクレジットカード情報漏洩10万9112件のカード名義人名、カード番号、カード有効期限、セキュリティコード、申込者住所が外部へ流出したことを確認。2008年3月頃より、SQLインジェクションによるWebサイトの改竄が多発している[5]。(IPA)はSQLインジェクションによる被害からの復旧コストは1億円を超えうるとしており[6]、実際にサウンドハウスの事例では補償のみでも122884名に1000円相当の期限付きクレジットを負担している。よる営業機会の逸失、風評被害といった負担があり、SQLインジェクションも含めセキュリティ対策は厳密に行うべきである。NRIセキュアが企業を対象に2007年度に行ったセキュリティ診断の統計では、41%のWebサイトが不正アクセス可能であり、そのうち22%でSQLインジェクション攻撃に対する脆弱性があった[7]。この統計で、SQLインジェクションの脆弱性のうち84%が、対策は行っていたが抜け穴が存在した。2011年7月6日閲覧。2014年12月8日閲覧。2011年7月6日閲覧。不正アクセスによるお客様個人情報漏洩のお詫びとご報告、2010年7月20日。SQLインジェクションの復旧コスト、1億円超える事例も~IPAが報告書、2006年11月29日。3.0のもとで利用可能です。プライバシーデスクトップ。