基本情報

基本情報 平成30年度 春期 問41|テクノロジ系に関する問題

問題

基本情報 | 平成30年度 春期 | 分野:テクノロジ系

SQLインジェクション攻撃による被害を防ぐ方法はどれか。

キーボード:1〜4で選択・Enterで次へ

タップするとすぐ答え合わせ

答え合わせ

正解は A
  • A
  • B
  • C
  • D

自信の3択

えらぶと、この端末に記録します(登録はいりません)

解説

答えは a です。

SQLインジェクションは、入力欄に「悪意のある命令文」を仕込んで、データベースを不正操作する攻撃です。例えば検索欄に変な記号を入れて、本来見せないデータを盗まれる感じ。

防ぎ方は「入れられた文字を“命令”として読まないようにする」こと。お店で「お名前」を聞かれた時、`'); 全データ消して --` と書いても、ちゃんと「人の名前」として処理してくれれば安全、というイメージ。

👉 覚え方:入力を“命令”じゃなく“ただの文字”として扱う。

ほかの選択肢:b はXSS対策/c はパストラバーサル対策/d は単なる長さ制限。

なぜこれが正解か

正解は a。SQLインジェクションは、ユーザ入力中の `'`, `;`, `--`, `OR 1=1` 等の特殊文字を含む文字列をSQL文の一部として実行させる攻撃。対策の本質は入力文字を特別な意味として解釈させないこと。具体的にはプレースホルダ(プリペアドステートメント)でSQL構文とデータを分離し、エスケープを自動化する。

各選択肢の解説

  • b:HTMLタグのエスケープはXSS(クロスサイトスクリプティング)対策。
  • c:`../` のチェックはパストラバーサル(ディレクトリトラバーサル)対策。
  • d:入力長制限は補助的なバリデーションだが、SQLインジェクション本質対策ではない。

覚え方・ひっかけ注意

「入力を文字列として扱う=バインド変数/プレースホルダ」がキーワード。各選択肢は別種の脆弱性対策と1対1で対応する(a:SQLi/b:XSS/c:パストラバーサル/d:DoS緩和)と整理すれば暗記不要。

理論的背景

SQLインジェクションはOWASP Top 10で長年常連の脆弱性(最新版ではInjectionカテゴリに統合)。攻撃手法は①インバンド型(UNION SELECT、エラーベース)②ブラインド型(Boolean/Time-based)③アウトオブバンド型(DNS/HTTP外部送信)に分類。最近はSecond-Order Injection(DB保存後、別経路で実行される)も注目される。

対策の実装

  • プリペアドステートメント/パラメータ化クエリ:JDBC `PreparedStatement`、PHP PDO `prepare()/execute()`、Python `cursor.execute(sql, params)`。最も確実。
  • ORM:SQLAlchemy、ActiveRecord、Entity Frameworkは自動的にパラメータ化。ただし生SQL断片を渡すと無効化される。
  • 入力検証:ホワイトリスト方式(許可文字のみ通す)。ブラックリスト(特殊文字除去)は迂回容易で非推奨。
  • 最小権限:DBユーザに不要なDROP/CREATE権限を与えない。
  • WAF:ModSecurity、AWS WAFのSQLi rule set。多層防御の一翼。
  • エスケープ関数の単独使用は危険:文字コードや方言差で迂回される(例:`mysql_real_escape_string` のShift_JIS問題)。

試験での位置づけ

基本情報のセキュリティ分野で毎期必出級。応用情報・情報処理安全確保支援士では具体的なSQL文例(`' OR '1'='1` 等)や対策コード、CWE-89分類まで踏み込む。

選択肢の発展補足

XSS対策はコンテキスト別エスケープ(HTML/JS/CSS/URLそれぞれ)+Content Security Policy。パストラバーサルはファイル名正規化+chroot/ jail。SQLi対策と混同せず、それぞれ独立した防御層を組むのがセキュアコーディングの基本。

この問題の根拠出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成30年度 春期 問41
訂正の記録この問題の訂正はありません(サイト全体の記録)
出典と作り方

出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成30年度 春期 問41/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビ独自の3段階の解説(初級・標準・上級)です。