SQL インジェクションとは
この記事は約 2 分で読めます
SQL インジェクション (SQL Injection) とは、 Web アプリケーションの入力フォームなどに不正な SQL 文を挿入し、データベースを不正に操作する攻撃手法です。認証の回避、データの窃取・改ざん・削除、さらにはサーバーの制御権奪取にまで至る可能性がある、極めて危険な脆弱性です。 OWASP Top 10 でも長年上位にランクインしており、 2024 年もインジェクション攻撃は主要な脅威カテゴリとして位置づけられています。
現場での使用例
「ペネトレーションテストで、検索機能のクエリパラメータに UNION SELECT を挿入したところ、ユーザーテーブルの全レコードが取得できました。パラメータ化クエリへの移行を最優先で対応しています。」
SQL インジェクションのフロー
攻撃の仕組み
ユーザー入力をそのまま SQL 文に組み込むプログラムが攻撃対象となります。たとえば、ログインフォームに「' OR 1=1 --」と入力することで認証を回避したり、 UNION 句を使って他のテーブルのデータを取得したりできます。ブラインド SQL インジェクションでは、エラーメッセージが表示されなくても真偽値の違いからデータを推測できます。SQL インジェクション対策の書籍 (Amazon)で詳しく学べます。
具体的な被害シナリオ
よくある誤解は「 SQL インジェクションは古い攻撃手法で、現代のシステムでは起きない」というものです。実際には、レガシーシステムの改修や新規開発でもパラメータ化クエリを使わずに文字列結合で SQL を組み立てるコードはいまだに発見されています。 2024 年にも大手企業のデータベースから数百万件の顧客情報が SQL インジェクションで流出した事例が報告されています。攻撃者は自動化ツール (sqlmap など) を使って脆弱なサイトを効率的に探索するため、小規模なサイトでも標的になります。
ユーザーとしての備え
SQL インジェクションはサーバー側の脆弱性ですが、ユーザーとしても備えが必要です。サービスごとに固有のランダムパスワードを設定しておけば、 1 つのサービスでデータ漏洩が発生しても他のアカウントは安全です。利用するサービスがデータ漏洩を公表した場合は、速やかにパスワードを変更しましょう。データ保護の書籍 (Amazon)も参考になります。
この記事は役に立ちましたか?