情報セキュリティ
基本情報技術者試験|あるWebアプリの一覧画面は、利用者が選んだ並べ替え対象の列名をSQL文のORDER…
あるWebアプリの一覧画面は、利用者が選んだ並べ替え対象の列名をSQL文のORDER BY句に直接埋め込んでいる。列名は値ではなく構文要素のためプレースホルダで束縛できず、入力をそのまま連結すると注入の余地が残る。この箇所の対策として、最も適切なものはどれか。
エ利用者の選択をサーバ側の正規の列名群と突き合わせ、合致した既定の列名だけをSQLに組み込む。
ア並べ替え対象の列名もプレースホルダの引数として渡し、データの値とまったく同じく束縛して扱う。
イ一覧画面に一度に表示する行数の上限を小さく設定し、応答に含める件数を抑えるようにする。
ウ並べ替えた結果をブラウザのキャッシュに残し、再表示の際の問合せ回数を減らすようにする。
正解
エ.利用者の選択をサーバ側の正規の列名群と突き合わせ、合致した既定の列名だけをSQLに組み込む。
ORDER BY句の列名は値ではなくSQLの構文要素であり、プレースホルダ(値の束縛)では扱えない。そのため、利用者の選択をサーバ側で保持する正規の列名群と突き合わせ、合致した場合のみあらかじめ用意した既定の列名をSQLに組み込む方式が適切である。任意の文字列がSQLへ混入する余地がなくなり、この箇所のSQLインジェクションを防げる。
?選択肢ごとの解説
エ ○ORDER BY句の列名は値ではなくSQLの構文要素であり、プレースホルダ(値の束縛)では扱えない。そのため、利用者の選択をサーバ側で保持する正規の列名群と突き合わせ、合致した場合のみあらかじめ用意した既定の列名をSQLに組み込む方式が適切である。任意の文字列がSQLへ混入する余地がなくなり、この箇所のSQLインジェクションを防げる。
ア ×列名は値ではなく構文要素のためプレースホルダで束縛できず、無理に値として渡しても並べ替えが意図どおり機能しないか注入を防げないため適切でない。
イ ×表示行数の上限縮小は返す件数を減らすだけで、列名に任意文字列が連結される注入の余地は残るため対策にならない。
ウ ×結果のキャッシュ保存は再表示時の性能向上に関わるだけで、列名連結による注入脆弱性とは無関係である。
情報セキュリティの他の問題
M社の会員検索機能で、利用者の入力した会員名をSQL文に直接連結して問合せを実行している。診断で『名前欄に特殊な文字列を入れ…あるWebアプリのログイン処理は、入力されたIDとパスワードを文字列としてSQL文に連結し『該当行が1件以上あれば認証成功』…A社のWebアプリで、利用者が入力する都道府県コードを検証する処理を実装する。コードは『01』から『47』までの定義済みの値…B社では開発中のWebアプリについて、まだ動作する環境を構築していない段階で、ソースコードに潜む脆弱性をできるだけ早期に洗い…C社の脆弱性管理担当者は、診断ツールが報告した多数の脆弱性に対し、限られた人員で修正対応する順序を決めたい。対応の優先度を客…D社の製品は多数のオープンソースライブラリを組み込んでいるが、どのバージョンの何を使っているかを正確に把握できておらず、新た…E社の基幹システムに、重要なセキュリティ修正プログラムの提供が始まった。過去に修正プログラムを本番へ即時適用した際、既存機能…F社は脆弱性診断ツールによる網羅的な検査は定期実施しているが、検出された個々の弱点が実際に組み合わさって重要システムへの侵入…
この問題の「深掘り・誤答の完全解説・覚え方」は、登録すると読めます。
基本情報技術者試験は全4,036問。公開しているのはその一部で、登録すると残りも一問ごとにAI解説つきで解けます。SRS暗記カード・全真模試・弱点診断まで。
登録は1分・クレジットカード不要。無料のまま練習・暗記カード・模試まで使えます。
作成・校閲:ukamiru編集部 · 基本情報技術者試験 過去問 · fe-b-sec-0108
