プレースホルダ(プリペアドステートメント)とは?
プレースホルダ(プリペアドステートメント)とは、SQL文の構文を先にデータベースへ渡して解析させ、値は後から別枠で与える仕組み。値がSQLの構文として解釈される機会がそもそも無くなるため、文字列連結や個別のエスケープに頼るより確実にSQLインジェクションを防げる。静的プレースホルダと動的プレースホルダの区別がある。
基本情報技術者試験の過去問では5回出題されています(2016年度〜2024年度)。
ぷれーすほるだ
プレースホルダ(プリペアドステートメント)の意味
SQL文の構文を先にデータベースへ渡して解析させ、値は後から別枠で与える仕組み。値がSQLの構文として解釈される機会がそもそも無くなるため、文字列連結や個別のエスケープに頼るより確実にSQLインジェクションを防げる。静的プレースホルダと動的プレースホルダの区別がある。
プレースホルダ(プリペアドステートメント)の具体例
検索条件の会員IDをWHERE id = ?として束縛し、実行時に値だけを渡す。DBサーバ側で構文木が確定してから値が入るため、値に引用符やOR 1=1が含まれてもただの文字列として扱われ、条件式が書き換わらない。
プレースホルダ(プリペアドステートメント)は試験でどう引っ掛けられる?
テーブル名・列名・ORDER BYの並び順・LIKEのワイルドカードは値ではないため束縛できず、ここは許可リストで固定するしかない。またドライバがクライアント側で文字列を組み立てる動的プレースホルダは、文字コードの扱い次第で回避の余地が残る。
プレースホルダ(プリペアドステートメント)と関連する用語
プレースホルダ(プリペアドステートメント)が出た過去問
SQLインジェクション攻撃の説明として,適切なものはどれか。
正解:Webアプリケーションのデータ操作言語の呼出し方に不備がある場合に,攻撃者が悪意をもって構成した文字列を入力することによって,データベースのデータの不正な取得,改ざん及び削除をする攻撃
要点:SQLインジェクションは入力値でSQL文を書き換える攻撃
SQLインジェクションは、入力値をそのままSQL文に連結してしまう実装の不備を突く攻撃である。攻撃者が引用符や論理式を含む文字列を送り込むと、開発者の意図しないSQL文が組み立てられ、データの不正取得・改ざん・削除が起きる。対策としてはプレースホルダを用いた文の組立てが基本になる。
出典:平成28年度 春期 基本情報技術者試験 午前 問37(IPA)SQLインジェクション攻撃の説明はどれか。
正解:Webアプリケーションに問題があるとき、悪意のある問合せや操作を行う命令文をWebサイトに入力して、データベースのデータを不正に取得したり改ざんしたりする攻撃
要点:SQLインジェクションは入力経由でDBに不正なSQLを実行させる
SQLインジェクションは、入力値の検証やエスケープが不十分なWebアプリケーションに対し、SQL文として解釈される文字列を送り込み、開発者が意図しない問合せや更新をデータベースに実行させる攻撃である。情報の不正取得、改ざん、削除につながる。プレースホルダ(バインド機構)の利用が根本的な対策となる。
出典:平成29年度 秋期 基本情報技術者試験 午前 問39(IPA)SQLインジェクション攻撃による被害を防ぐ方法はどれか。
正解:入力された文字が、データベースへの問合せや操作において、特別な意味をもつ文字として解釈されないようにする。
要点:SQLインジェクション対策は入力を値としてのみ扱うこと
SQLインジェクションは、入力値に含まれた引用符などの記号がSQL文の一部として解釈されることで、意図しない問合せが実行される攻撃である。対策は、プレースホルダの利用やエスケープ処理によって、入力文字をあくまで値として扱い特別な意味をもたせないことである。
出典:平成30年度 春期 基本情報技術者試験 午前 問41(IPA)SQLインジェクション攻撃による被害を防ぐ方法はどれか。
正解:入力された文字が、データベースへの問合せや操作において、特別な意味をもつ文字として解釈されないようにする。
要点:SQL文の制御記号として解釈させないのが根本対策
SQLインジェクションは、入力値に含まれる引用符などの記号がSQL文の一部として解釈されてしまうことで起こる。対策は、入力された文字をSQLにとって特別な意味をもつ記号として扱わせないことであり、プレースホルダを使った問合せや適切なエスケープ処理がこれに当たる。HTMLタグの無害化はクロスサイトスクリプティング、上位ディレクトリ指定の拒否はディレクトリトラバーサルへの対策である。
出典:令和4年度 s 基本情報技術者試験 kamokuA 問36(IPA)SQLインジェクションの対策として、有効なものはどれか。
正解:プレースホルダを使って命令文を組み立てる。
要点:SQLインジェクション対策の基本はプレースホルダ利用
SQLインジェクションは、入力値がSQL文の一部として解釈されることで生じる。プレースホルダ(バインド機構)を使えば、値はあくまでパラメタとして渡され、SQL文の構造を変えられないため攻撃が成立しない。他の選択肢はオープンリダイレクトやディレクトリトラバーサルなど、別の脆弱性への対策である。
出典:令和6年度 (公開問題) 基本情報技術者試験 kamokuA 問10(IPA)
最終更新:2026-08-25/解説は資格暗記が独自に作成しています。 過去問の出典は各問題に記載のとおりです。