応用情報技術者試験のセキュリティ対策:SQLインジェクションとは?
SQLインジェクション(SQL Injection)とは、Webアプリケーションの入力欄に不正なSQL文を埋め込み、データベースを不正操作する攻撃手法です。
ユーザーが入力した値をそのままSQL文として実行してしまうアプリケーションの脆弱性を突くもので、情報漏洩・データ改ざん・認証回避などにつながる深刻なリスクがあります。
SQLインジェクションの仕組み
- Webフォームなどから送信された入力値が、直接SQL文に組み込まれて実行される
- 攻撃者がSQLの構文を悪用し、意図しない命令を実行させる
攻撃の例
入力欄: ユーザー名 → ' OR '1'='1
SQL文: SELECT * FROM users WHERE username = '' OR '1'='1';
→ 条件が常に真となり、全ユーザーの情報が表示されてしまう
主な被害内容
- 個人情報の漏洩: 顧客情報・メールアドレス・パスワードなど
- データの改ざん・削除: データベースの信頼性を損なう
- 管理者認証の回避: 本人確認をバイパスしてログインされる
対策方法
- プレースホルダ(バインド機構)を使ったSQL実行(例:PreparedStatement)
- ユーザー入力のサニタイズ(無害化)やエスケープ処理
- 権限の制御(DBアカウントに最小限の操作権限を与える)
- WAF(Web Application Firewall)などの導入
安全なSQLの例(バインド使用)
SELECT * FROM users WHERE username = ?;
→ ユーザー入力はSQL構文として解釈されず、単なる値として扱われる
応用情報技術者試験での出題ポイント
- SQLインジェクションの攻撃方法とその仕組み
- 発生する原因(入力チェック不足、SQL直結)
- 防止策(プリペアドステートメント、エスケープなど)
- 被害例や影響範囲
学習のコツ
- 実際のSQL文に攻撃文字列が入ったときの動作をシミュレーションする
- 安全なコードと脆弱なコードを見比べる
- 「入力をそのまま使う=危険」という原則を理解する
まとめ
- SQLインジェクション: 入力に悪意あるSQL文を含め、DBを不正操作する攻撃
- 対策にはプリペアドステートメントや入力の検証が有効
- 試験では「仕組み・影響・対策」の3点セットで問われる
SQLインジェクションは、Webシステムで最も基本的かつ危険な脆弱性の一つです。
応用情報技術者試験では、実際の攻撃例や防止策の正確な理解が求められます。安全な開発のために、根本的な原因と対策をしっかり身につけましょう。