SQLインジェクション
定義
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はエラーが出ない環境でも時間差・真偽応答で情報を抜き取れる
関連用語
SQLインジェクションが登場する記事・比較
よくある質問
SQLインジェクションとは?
WebアプリケーションのSQLクエリに悪意のある入力を注入し、DBを不正操作する攻撃。プリペアドステートメントで根本的に防御できる。OWASP Top 10の常連脆弱性。
SQLインジェクションについて詳しく知るには?
1998年に初めて文書化されてから25年以上経過した今もOWASP Top 10に含まれる最重要の脅威です。プリペアドステートメント(パラメータ化クエリ)1つで根本的に防御できるにもかかわらず、フレームワークの誤用やORMのネイティブクエリ混在で継続的に発生しています。Blind SQLインジェクションはエラーが表示されない環境でも時間ベースの応答差分で情報を抽出できます。
SQLインジェクションのポイントは?
プリペアドステートメントで根本防御(SQLとデータを分離する設計が重要) ORM(Hibernate・Active Record等)を正しく使えば大半のケースは自動防御される WAFは補助的対策であり根本解決にはならない Blind SQLiはエラーが出ない環境でも時間差・真偽応答で情報を抜き取れる
同じカテゴリの用語(攻撃手法)
攻撃者が正規サービスと利用者の間に入り、認証情報やセッションを中継・窃取するフィッシング手法。…
国家支援組織や高度な技術を持つ攻撃グループによる長期・潜伏型の標的型攻撃。数ヶ月〜数年かけて侵入・維持・情報収集を行う。…
取引先や経営者になりすまして送金、請求書変更、機密情報送付を促すビジネスメール詐欺。…
実在ブランド、取引先、社内組織になりすまし、利用者に誤操作や情報入力を促す攻撃。…
ログインID、パスワード、トークン、MFAコードなどの認証情報を大量または継続的に収集する行為。…
他サービスから漏えいしたIDとパスワードの組み合わせを使い、別サービスへのログインを試す攻撃。…