※本ページにはプロモーション(広告)が含まれています
Webフォーム等から不正なSQL文を送り込み、データベースを操作する攻撃。情報漏えいや改ざんの代表的な手口。
詳しい解説
SQLインジェクションは、Webアプリケーションの入力欄からデータベースへの命令文(SQL)を注入(インジェクション)し、本来アクセスできないはずのデータを盗み出したり、書き換えたり、削除したりする攻撃です。OWASP Top10にも長年上位で掲載されている、最も古典的かつ破壊力の高い脆弱性の一つです。
典型的な発生パターンは、ユーザーの入力値をそのままSQL文に連結してしまう実装ミスにあります。例えばログイン処理で入力されたID・パスワードをチェックなしにクエリへ埋め込むと、攻撃者が特定の記号や論理式を混ぜることで、意図した条件を無効化し、管理者権限でログインできてしまうケースが代表的です。被害はデータ漏えいだけにとどまらず、テーブル全削除・管理者アカウント追加・バックドア設置など、運用そのものを壊滅させる規模に及びます。
防御の基本は『プレースホルダー(プリペアドステートメント)の徹底利用』です。ユーザー入力をSQL文の構造とは切り離してバインド変数として扱えば、どんな文字列を入れられても構文が崩れません。加えて、①入力値のホワイトリスト検証、②エラーメッセージから内部情報を漏らさない、③最小権限のデータベースユーザーでアプリを動かす、④WAFでSQL構文パターンを検出・遮断、⑤ORMの利用で生のSQL記述を減らす、などを多層的に組み合わせます。
既に公開中のサービスでは、定期的な脆弱性スキャン・ペネトレーションテストで穴を洗い出し、早期発見・早期修正のサイクルを回すことが重要です。新規開発時には、セキュアコーディング教育とコードレビューで『入力をそのままSQLに混ぜない』原則を組織文化として根付かせる必要があります。
あるECサイトのログイン画面で、攻撃者がID入力欄に普通の文字の代わりに論理式を混ぜた文字列を入れたところ、パスワードが間違っていても管理者としてログインできてしまった、という事例を考えてください。これはアプリがIDを検証せず直接SQL文に連結していたために発生した典型的なSQLインジェクションで、プレースホルダーを使った書き換えにより根本的に防ぐことができます。
別の呼び方
SQL注入攻撃
データベース注入攻撃
sql injection
minto.tech スマホ(Android/iPhone)・PC(Mac/Windows)の便利情報をお届け! 月間アクセス160万PV!スマートフォン、タブレット、パソコン、地デジに関する素朴な疑問や、困ったこと、ノウハウ、コツなどが満載のお助け記事サイトはこちら!