情報セキュリティ

基本情報技術者試験あるWebアプリの一覧画面は、利用者が選んだ並べ替え対象の列名をSQL文のORDER…

情報セキュリティ情報セキュリティ難易度:hard
あるWebアプリの一覧画面は、利用者が選んだ並べ替え対象の列名をSQL文のORDER BY句に直接埋め込んでいる。列名は値ではなく構文要素のためプレースホルダで束縛できず、入力をそのまま連結すると注入の余地が残る。この箇所の対策として、最も適切なものはどれか。
利用者の選択をサーバ側の正規の列名群と突き合わせ、合致した既定の列名だけをSQLに組み込む。
並べ替え対象の列名もプレースホルダの引数として渡し、データの値とまったく同じく束縛して扱う。
一覧画面に一度に表示する行数の上限を小さく設定し、応答に含める件数を抑えるようにする。
並べ替えた結果をブラウザのキャッシュに残し、再表示の際の問合せ回数を減らすようにする。
正解
エ.利用者の選択をサーバ側の正規の列名群と突き合わせ、合致した既定の列名だけをSQLに組み込む。

ORDER BY句の列名は値ではなくSQLの構文要素であり、プレースホルダ(値の束縛)では扱えない。そのため、利用者の選択をサーバ側で保持する正規の列名群と突き合わせ、合致した場合のみあらかじめ用意した既定の列名をSQLに組み込む方式が適切である。任意の文字列がSQLへ混入する余地がなくなり、この箇所のSQLインジェクションを防げる。

?選択肢ごとの解説

エ ○ORDER BY句の列名は値ではなくSQLの構文要素であり、プレースホルダ(値の束縛)では扱えない。そのため、利用者の選択をサーバ側で保持する正規の列名群と突き合わせ、合致した場合のみあらかじめ用意した既定の列名をSQLに組み込む方式が適切である。任意の文字列がSQLへ混入する余地がなくなり、この箇所のSQLインジェクションを防げる。
ア ×列名は値ではなく構文要素のためプレースホルダで束縛できず、無理に値として渡しても並べ替えが意図どおり機能しないか注入を防げないため適切でない。
イ ×表示行数の上限縮小は返す件数を減らすだけで、列名に任意文字列が連結される注入の余地は残るため対策にならない。
ウ ×結果のキャッシュ保存は再表示時の性能向上に関わるだけで、列名連結による注入脆弱性とは無関係である。
この問題の「深掘り・誤答の完全解説・覚え方」は、登録すると読めます。

基本情報技術者試験は全4,036問。公開しているのはその一部で、登録すると残りも一問ごとにAI解説つきで解けます。SRS暗記カード・全真模試・弱点診断まで。

登録は1分・クレジットカード不要。無料のまま練習・暗記カード・模試まで使えます。

作成・校閲:ukamiru編集部 · 基本情報技術者試験 過去問 · fe-b-sec-0108

【基本情報技術者試験】あるWebアプリの一覧画面は、利用者が選んだ並べ替え対象の列…|正解「利用者の選択をサーバ側の正規…」|ukamiru 過去問