基本情報技術者試験
えすきゅーえるいんじぇくしょんたいさく
SQLインジェクション対策
Countermeasures against SQL Injection
入力された文字を命令として解釈させないことで、データベースの不正操作を防ぐ対策です。
詳しい説明
1. 定義
SQLインジェクション対策とは、利用者が入力した文字がデータベースへの命令の一部として解釈されてしまうことを防ぎ、データの盗み出しや書き換えを起こさせないようにする対策のことです。
2. 仕組みと内訳
攻撃が成り立つのは、入力された文字をそのままつなげて命令を組み立てているときです。命令の区切りを表す記号を入力に混ぜられると、そこから先が新しい命令として実行されてしまいます。
対策は次の順で考えます。
- 主たる対策: 命令の骨組みを先に決めておき、入力された値はあとから当てはめるだけにします。この当てはめる場所をプレースホルダと呼び、当てはめるしくみをバインド機構と呼びます。骨組みが先に確定しているので、入力に何を書かれても命令にはなりません
- 補う対策: 命令の意味を持つ記号を無害な形に置き換えます。ただし置き換え漏れが起きやすく、これだけに頼るのは危険です
- 被害を小さくする備え: データベースに接続する利用者の権限を、必要な範囲に絞ります。万一通されても、できることを限れます
- 見つけるための備え: 入口で不正な入力を検知するしくみを置き、記録を残します
試験で問われること
基本情報技術者試験
- プレースホルダとバインド機構が主たる対策である理由を説明できる
- 記号の置き換えだけに頼る危うさを理解する
- 権限を絞ることが被害を小さくする備えになることを理解する
- 攻撃手法とその対策を扱う設問で、クロスサイトスクリプティング対策と並べて出ます。入力を値として扱うという考え方が要点です。
最終更新日: 2026/09/23