PR

基本情報技術者試験 令和6年度 科目A 公開問題(過去問) 問10 解説

基本情報技術者試験 令和6年度 科目A 公開問題(過去問) 問10 について解説します。

問題

問10 SQLインジェクションの対策として,有効なものはどれか。

ア URLをWebページに出力するときは,“http://”や“https://”で始まるURLだけを許可する。
イ 外部からのパラメータでWebサーバ内のファイル名を直接指定しない。
ウ スタイルシートを任意のWebサイトから取り込めるようにしない。
エ プレースホルダを使って命令文を組み立てる。

解説・解答

SQLインジェクションとは
SQLインジェクションとは、Webアプリケーションがデータベースと連携する際の脆弱性を利用して、悪意のあるSQL文を実行させる攻撃です。
(例)
ログイン画面で本来以下のようなSQLが想定されていたとします。
  SELECT * FROM users WHERE username = ‘入力値’ AND password = ‘入力値’;
ここに攻撃者が、ユーザー名に「’ OR ‘1’=’1」、パスワードに「xxx」(何でもいい) を入力した場合、実行されるSQLは以下のようになります。
  SELECT * FROM users WHERE username = ‘ OR ‘1’=’1′ AND password = ‘xxx’;
このようにするとSQLの条件が常に真になり、不正ログインが可能になるという仕組みです。

それぞれの選択肢について確認します。

ア: URLをWebページに出力するときは,“http://”や“https://”で始まるURLだけを許可する。
これはユーザが提供したURLをHTMLに出力する際、信頼できるスキーム(http/https)以外を拒否することで、危険なスクリプトの実行やフィッシング誘導を防ぐという対策になります。この対策はSQL文の構造やデータベースには一切関係がなく、SQLインジェクションには無効です。

イ: 外部からのパラメータでWebサーバ内のファイル名を直接指定しない。
これはパストラバーサル(Directory Traversal)という「../」などを使って意図しないファイルやディレクトリにアクセスする攻撃(例: ../../../etc/passwd など)に対する対策です。ファイルシステムへのアクセス制御の話であり、SQL文の構築とは関係ないため、SQLインジェクションには無効です。

スタイルシートを任意のWebサイトから取り込めるようにしない。
これは、外部の攻撃者が用意したスタイルシート(CSS)に悪意のあるコードや追跡用タグが仕込まれている可能性があるため、信頼できるドメインのスタイルシート(CSS)しか読み込ませないようにする対策です。スタイルシート(CSS)はSQL文やデータベース操作に全く関与しないため、SQLインジェクションには無効です。

エ: プレースホルダを使って命令文を組み立てる。
これがSQLインジェクションに対する対策です。
プレースホルダとは、SQL文中に「?」や名前付きのパラメータ(:nameなど)を使い、ユーザ入力を直接SQL文に埋め込まずに、後から変数としてバインドする方法です。SQLは以下のようになります。
  SELECT * FROM users WHERE username = ? AND password = ?;
プレースホルダを使うと、入力値が構文の一部として解釈されず、単なるデータとして扱われるため、悪意あるSQL構文(例:’ OR ‘1’=’1)を入力されても、SQL文の構造が壊れません。

以上により、この問題の解答は「エ」になります。