パラメータ化クエリ
パラメータ化クエリ とは何ですか?
パラメータ化クエリ値を SQL 本文とは別にプレースホルダ経由で渡すデータベースクエリで、ユーザー入力がクエリ構造を変えられないようにする。
パラメータ化クエリ(プリペアドステートメント)では、開発者が「?」や「:id」のようなプレースホルダ付きの SQL テンプレートをあらかじめコンパイルし、後から値をバインドします。データベースエンジンはパラメータを厳密に「データ」として扱い、SQL 構文の一部にはしないため、引用符・セミコロン・コメント記号を含む入力でもクエリのロジックを変えることはできません。これは SQL インジェクション(CWE-89)に対する標準的な対策で、ほとんどのドライバや ORM が対応しています。信頼できない入力を含むあらゆる SQL でデフォルトとし、最小権限の DB アカウント、許可リストによる入力検証、動的識別子向けの安全な ORM API と組み合わせます。
● 例
- 01
ユーザー ID を文字列連結する代わりに、'SELECT * FROM users WHERE id = ?' に整数パラメータをバインドする。
- 02
PDO や psycopg で名前付きパラメータと値の辞書を使い、文字列フォーマットを避ける。
● よくある質問
パラメータ化クエリ とは何ですか?
値を SQL 本文とは別にプレースホルダ経由で渡すデータベースクエリで、ユーザー入力がクエリ構造を変えられないようにする。 サイバーセキュリティの アプリケーションセキュリティ カテゴリに属します。
パラメータ化クエリ とはどういう意味ですか?
値を SQL 本文とは別にプレースホルダ経由で渡すデータベースクエリで、ユーザー入力がクエリ構造を変えられないようにする。
パラメータ化クエリ からどのように防御しますか?
パラメータ化クエリ に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
パラメータ化クエリ の別名は何ですか?
一般的な別名: プリペアドステートメント, バインドパラメータクエリ。