問題
問10
SQLインジェクションの対策として,有効なものはどれか。
- URLをWebページに出力するときは,“http://”や“https://”で始まるURLだけを許可する。
- 外部からのパラメータでWebサーバ内のファイル名を直接指定しない。
- スタイルシートを任意のWebサイトから取り込めるようにしない。
- プレースホルダを使って命令文を組み立てる。
[出典:基本情報技術者試験 令和6年度(科目A) 問10]
スポンサーリンク
正解
正解は「エ」です。
解説
SQLインジェクションとは、Webアプリケーションにおいて、ユーザの入力を通じて意図しないSQL文が実行されてしまう攻撃のことです。たとえば、ログインフォームで「’ OR ‘1’=’1」のような文字列を入力すると、SQLの条件式が常に真となり、不正にログインできてしまうことがあります。
この攻撃への有効な対策が「プレースホルダ(またはバインド変数)」を使う方法です。プレースホルダとは、SQL文の中に直接値を埋め込まず、「?」や「:name」などの記号でパラメータの位置を指定し、値を別途安全に渡す方法です。こうすることで、ユーザ入力がSQLの命令文として実行されることを防げます。
たとえば、`SELECT * FROM users WHERE id = ?` のように書いておき、後から`?`に安全な値をバインドします。この方法により、SQL文の構造が固定され、悪意のある入力が構文を壊すことがなくなります。
したがって、選択肢エの「プレースホルダを使って命令文を組み立てる」が正解となります。他の選択肢はセキュリティの別の分野に関する内容です。
- ア(“http://”や“https://”で始まるURLだけを許可する):
これはクリックジャッキングや外部リンク制御の対策に近く、SQLインジェクションとは関係ありません。 - イ(Webサーバ内のファイル名を直接指定しない):
これはパス・トラバーサル(パスの不正アクセス)への対策です。SQLインジェクションの対策ではありません。 - ウ(スタイルシートを任意のWebサイトから取り込めないようにする):
これはクロスサイトスクリプティング(XSS)などの外部リソース読み込みのリスクに関連する対策です。
難易度
SQLインジェクションは代表的なWeb攻撃の1つであり、ITパスポート試験でも頻出のテーマです。プレースホルダやバインド変数といった基本的な対策を理解していれば正解にたどり着けますが、他の選択肢もセキュリティ用語として正しいため、初学者にはやや混乱を招きやすい問題といえます。
スポンサーリンク
用語補足
SQLインジェクション:
入力データを悪用して、SQL文の構造を壊し、データベースに対して不正な命令を実行させる攻撃手法です。ログイン回避やデータ漏洩の原因になります。
プレースホルダ:
SQL文において、後から安全に値を埋め込むための記号です。SQL構造とデータ入力を分離することで、インジェクション攻撃を防ぎます。
パス・トラバーサル:
ユーザが意図的に「../」などを使ってサーバ内の本来アクセスできないファイルを読み取る攻撃です。ファイルパスの制御ミスが原因です。
対策
SQLインジェクション対策として、プレースホルダの使用は最も基本かつ効果的な手法です。入力値の検証(バリデーション)やエスケープ処理とあわせて、SQL文を構造的に守ることが重要です。Web開発では常に「ユーザ入力は信頼しない」を前提に設計する意識を持ちましょう。