バインド機構に関するネットワークスペシャリスト試験

 了解しました!

ここでは 「バインド機構」(主にデータベースにおけるプレースホルダ/バインド変数によるSQL実行の仕組み)をテーマにした ネットワークスペシャリスト試験風の問題10問(択一式+解答+解説) を一気に作成します。



---


バインド機構に関する問題(10問)



---


問題1


SQLインジェクション攻撃を防ぐために利用されるバインド機構の特徴はどれか。

A. 入力値を直接SQL文に文字列連結する

B. 入力値をプレースホルダに割り当てる

C. SQL文を暗号化して送信する

D. データベースのアクセス制御を強化する


【正解】B

【解説】バインド機構ではSQL文と値を分離し、値をプレースホルダにバインドするためSQLインジェクションを防止できる。



---


問題2


次のSQL文において「?」が示すものは何か。


SELECT * FROM users WHERE id = ?;


A. テーブル名

B. プレースホルダ

C. サブクエリ

D. 関数呼び出し


【正解】B

【解説】「?」はプレースホルダであり、実際の値は実行時にバインド変数として与えられる。



---


問題3


バインド変数を用いることで得られる副次的な効果はどれか。

A. SQL文の圧縮

B. パフォーマンスの向上

C. 暗号化通信の確立

D. バックアップの容易化


【正解】B

【解説】SQL文がキャッシュされ、異なる値をバインドして再利用できるためパフォーマンスが向上する。



---


問題4


次のようなSQLを動的文字列で生成した場合、発生するリスクはどれか。


SELECT * FROM users WHERE name = '" + user_input + "';


A. デッドロック

B. SQLインジェクション

C. キャッシュミス

D. トランザクション遅延


【正解】B

【解説】ユーザ入力を文字列連結すると、攻撃者により任意のSQLを挿入される可能性がある。



---


問題5


バインド機構を使うとき、SQLパーサが受け取るものはどれか。

A. 値を含む完全なSQL文

B. 値を除いたSQL文とプレースホルダ情報

C. データベースのスキーマ定義

D. TCP/IPパケット


【正解】B

【解説】SQLパーサはプレースホルダ付きのSQLを解析し、実行時に値がバインドされる。



---


問題6


次のSQLで:idが意味するものは何か。


SELECT * FROM orders WHERE order_id = :id;


A. SQLコメント

B. バインド変数名

C. データ型指定

D. トリガ


【正解】B

【解説】:id は名前付きバインド変数であり、実行時に具体的な値が割り当てられる。



---


問題7


バインド機構を利用することで防げる脆弱性はどれか。

A. CSRF

B. SQLインジェクション

C. XSS

D. バッファオーバーフロー


【正解】B

【解説】SQLインジェクションはSQL文と値の分離により防御できる。



---


問題8


エスケープ処理とバインド機構の違いとして正しいのはどれか。

A. エスケープは入力値を無害化し、バインドはSQLと値を分離する

B. エスケープは高速化、バインドはセキュリティ向上

C. エスケープはプレースホルダを使い、バインドは文字列変換

D. 両者は全く同じ仕組み


【正解】A

【解説】エスケープは文字列変換による対策、バインドはSQLと値を分離する設計思想に基づく。



---


問題9


以下のコードにおいてSQLインジェクション対策が正しくできているのはどれか。

A. query = "SELECT * FROM users WHERE id = " + user_id

B. query = "SELECT * FROM users WHERE id = '" + user_id + "'"

C. PreparedStatement ps = conn.prepareStatement("SELECT * FROM users WHERE id = ?"); ps.setString(1, user_id);

D. query = "SELECT * FROM users";


【正解】C

【解説】プレースホルダに対して setString で値を割り当てる方法が正しい。



---


問題10


バインド機構の利用が不十分で、SQLインジェクションのリスクが残るケースはどれか。

A. SELECT文にすべてバインド変数を利用している

B. テーブル名をユーザ入力から直接組み立てている

C. INSERT文に値をバインドしている

D. UPDATE文に値をバインドしている


【正解】B

【解説】テーブル名や列名はバインド変数にできないため、ユーザ入力を直接利用すると依然としてSQLインジェクションのリスクがある。



---


✅ 以上、バインド機構をテーマとした10問(択一式+解答+解説付き) を作成しました。


ご希望であれば、これを 午後Ⅰ形式の短文解析問題 や 午後Ⅱ形式のシナリオ解析問題(SQLインジェクション検証付き) にも展開できますが、続けますか?



コメント

このブログの人気の投稿

ミライアイ内服薬は薬事法違反で、ほとんど効果がない詐欺ですか?

最高裁での上告理由書受理・却下の判断基準について

裁判官の忌避申立書の作成例