対策
SQLインジェクション対策の基本はXSSと同じく適切なエスケープ処理を行うことだが、最近の開発環境の多くは、Prepared Statementあるいはバインドメカニズムと呼ばれる仕組みが実装されているので、それらを用いることが最も簡単な方法といえる。
特殊なケース
前回もブラウザに依存して発生する脆弱性が存在するケースがあると記述したが、SQLインジェクションについても同様に、使用しているデータベースエンジンやミドルウェア、開発言語などに依存して発生する脆弱性がある。
こうした例として、MySQLの脆弱性を利用したものがある。これはMySQLが日本語などのマルチバイトの文字列処理に問題があったため発生する脆弱性だ。
また、使用している文字コードが開発言語、データベースエンジンで異なっていると通常のSQLインジェクション対策では対応できないことがある(注1:次ページ参照)。その他にも、Microsoft SQL ServerにはOSコマンドを実行できるSQL文が用意されているため、データベースサーバを踏み台として利用するといったより大きな被害をもたらすことが可能となる場合がある(これらはバージョンアップや適切な設定により回避することが可能)。
SQLインジェクションについても使用している開発環境やミドルウェア、データベースエンジンの脆弱性を随時把握しておき、対策していく必要があるだろう。