🔐 セキュリティ
SQLインジェクションとは?仕組みと対策をわかりやすく解説
SQLインジェクションとは
SQLインジェクションとは、Webアプリケーションのデータベースに対して悪意のあるSQL文を埋め込む攻撃手法です。ログインフォームや検索フォームなど、ユーザーが入力できる箇所を悪用します。
💡 「injection(注入)」という名前の通り、不正なSQL命令をシステムに"注入"する攻撃です。
攻撃の仕組み
例えば、ログインフォームに以下のような入力をされた場合を考えます。
ユーザー名入力欄に: ' OR '1'='1 と入力
本来のSQL文: SELECT * FROM users WHERE username='入力値' が、SELECT * FROM users WHERE username='' OR '1'='1' に変化します。
'1'='1' は常に真なので、すべてのユーザー情報が取得されてしまいます。これによりパスワードなしでログインが可能になる場合があります。
被害の種類
- データベース内の個人情報・機密情報の漏洩
- 不正なログインによるなりすまし
- データの改ざん・削除
- システムの乗っ取り(管理者権限取得)
対策方法
| 対策 | 内容 |
|---|---|
| プリペアドステートメント | SQL文を事前にコンパイルし、入力値をデータとして扱う |
| エスケープ処理 | 特殊文字('、"、;など)を無害化する |
| 入力値の検証 | 想定外の文字列を受け付けないようにする |
| WAF(Webアプリケーションファイアウォール) | 不正なリクエストを検知・ブロックする |
| 最小権限の原則 | DBアカウントに必要最小限の権限のみ付与する |
❌ よくある誤解:「パスワードをかけていれば安全」→ SQLインジェクションはログイン前でも発動します。入力値の検証が最重要です。
試験対策ポイント
✅ SQLインジェクション対策の最も根本的な方法は「プリペアドステートメント(バインド機構)」です。試験でよく問われます。
- SQLインジェクション = データベースへの不正SQL注入攻撃
- 主な被害:情報漏洩、不正ログイン、データ改ざん
- 最重要対策:プリペアドステートメント+エスケープ処理
- WAFでも防御可能(ただし完全ではない)