プレースホルダ(バインド機構)とは?ぷれーすほるだ
プレースホルダ(バインド機構)とは、SQL文の骨格を先に確定させ、値の部分だけを後から変数として渡す仕組み。値が結び付くのは構文解析が終わった後なので、利用者が何を入力しても命令として読み直されることがなく、SQLインジェクションを原理から封じられる。文字列をつないでSQL文を組み立てないことが、最も確実な対策とされる。
最終更新:2026-10-09
この語が出る過去問を解く →背景
入力された検索語をそのまま文字列としてSQLにつなぐ書き方は、手早く動くものが作れるため長く使われてきた。しかしこの作りでは、引用符を含む入力を渡されるとSQL文の切れ目そのものがずれ、利用者の入力が命令として実行されてしまう。危ない文字を1つずつ打ち消す方向で塞ごうとしても、文字コードの扱い次第で抜け道が残る。プレースホルダは、値と命令を混ぜないという構造そのもので原因を断つ。
具体例
JavaのPreparedStatementやPHPのPDOでは、WHERE 学籍番号 = ? のように値の位置を記号で置いておき、実際の値は別に渡す。同じ形の問合せを繰り返す処理では、構文解析の結果を使い回せるので速度の面でも有利になる。
試験での引っ掛け
渡せるのは値だけで、表名・列名やORDER BYの並び順はプレースホルダにできない。その部分を可変にするなら、受け付ける文字列を許可リストで限定する。エスケープ処理による対策は文字コード次第で抜けが生じるため、置き換えられないときの次善の策と位置づけられる。
関連用語
出た過去問
出典:平成29年度 秋期 基本情報技術者試験 午前 問39(IPA)解説で登場
SQLインジェクション攻撃の説明はどれか。
正解:Webアプリケーションに問題があるとき、悪意のある問合せや操作を行う命令文をWebサイトに入力して、データベースのデータを不正に取得したり改ざんしたりする攻撃
要点:SQLインジェクションは入力経由でDBに不正なSQLを実行させる
SQLインジェクションは、入力値の検証やエスケープが不十分なWebアプリケーションに対し、SQL文として解釈される文字列を送り込み、開発者が意図しない問合せや更新をデータベースに実行させる攻撃である。情報の不正取得、改ざん、削除につながる。プレースホルダ(バインド機構)の利用が根本的な対策となる。
出典:令和6年度 公開問題 基本情報技術者試験 科目A 問10(IPA)解説で登場
SQLインジェクションの対策として、有効なものはどれか。
正解:プレースホルダを使って命令文を組み立てる。
要点:SQLインジェクション対策の基本はプレースホルダ利用
SQLインジェクションは、入力値がSQL文の一部として解釈されることで生じる。プレースホルダ(バインド機構(値を後から別に渡す仕組み))を使えば、値はあくまでパラメタとして渡され、SQL文の構造を変えられないため攻撃が成立しない。他の選択肢はオープンリダイレクトやディレクトリトラバーサルなど、別の脆弱性への対策である。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。