メインコンテンツへスキップ
攻撃手法

SQLインジェクション

SQL Injection

SQLインジェクションとはWebアプリケーションがユーザー入力をSQLクエリに直接結合する実装上の欠陥を突き、攻撃者が任意のSQLコマンドをデータベースに実行させる攻撃です。例えばログインフォームのユーザー名欄に「admin' OR '1'='1」と入力するだけで認証を迂回できるアプリが今も存在します。データの窃取・削除・改ざん・認証バイパス、場合によってはOSコマンドの実行(xp_cmdshell等)まで可能な深刻な脆弱性です。OWASPが1990年代後半から注意喚起を続けているにもかかわらずOWASP Top 10の常連であり続けており、フレームワークの誤用やORMの生クエリ混在が原因で繰り返し発生します。プリペアドステートメント(パラメータ化クエリ)を使えばSQLコードとデータが完全に分離されるため根本的に防御でき、WAFはあくまでも補助的な対策と位置づけることが推奨されます。

1998年に初めて文書化されてから25年以上経過した今もOWASP Top 10に含まれる最重要の脅威です。プリペアドステートメント(パラメータ化クエリ)1つで根本的に防御できるにもかかわらず、フレームワークの誤用やORMのネイティブクエリ混在で継続的に発生しています。Blind SQLインジェクションはエラーが表示されない環境でも時間ベースの応答差分で情報を抽出できます。

  • プリペアドステートメントで根本防御(SQLとデータを分離する設計が重要)
  • ORM(Hibernate・Active Record等)を正しく使えば大半のケースは自動防御される
  • WAFは補助的対策であり根本解決にはならない
  • Blind SQLiはエラーが出ない環境でも時間差・真偽応答で情報を抜き取れる
← 用語集一覧に戻る
ESC