データベースとのやりとりを行う言語であるSQLを悪用した攻撃で、Webアプリケーションのフォーム内に意図的に処理できない値を入力することによってデータベースの不正利用を招く。古くからこの脆弱性は指摘され、根本的解決があるにもかかわらず対策が後手に回っており、被害が後を絶たない。
SQLはリレーショナルデータベースを操作するための言語の一つで、プログラム上にSQL文を生成することによってソフトウェアからデータベースの定義と操作、そして回復や同時実行などの処理操作(トランザクション)の管理が行える。
SQLインジェクションは、WebページにあるフィールドにSQL文を故意に処理できないような形で入力(=注入)することで脆弱性を突き、その結果、データの破壊や改ざん、窃取などを可能にする攻撃である。
個人情報だけでなくシステムの情報までもが奪われ、果てはOSコマンド実行やファイルシステムへの書き込み(つまりWebサイト改ざんやバックドア設置など)にまで発展する可能性を秘めている。
SQLインジェクションの脆弱性自体は古くから知られているにもかかわらず、対策が後手に回っており、今でも被害が発生し続けている。
対策
開発者側の対策としては、実際の値を埋め込む「バインド機構」を使ってSQLステートメントを組み立てる(=プレースホルダを使用する)ことが挙げられる。
言い換えれば、文字列連結の演算を使用したSQLステートメントの組み立てを避けるということである。