SAシステムアーキテクト試験 午前Ⅱ

平成21年度秋期 システムアーキテクト 午前Ⅱ 問4

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

SQLインジェクション対策として実施するものはどれか。

選択肢

  1. ア
    入力データを送るときには,GETメソッドではなくPOSTメソッドを使う。
  2. イ
    入力データを送る前に,利用者認証を行う。
  3. ウ
    入力文字列をエスケープ処理して特殊文字を無効にする。
  4. エ
    プロトコルにHTTPSを使用してデータを暗号化する。
解き方のヒントを見る

外部入力を考える一つの視点

外部から受け取った情報を、そのまま信頼してよいものとして扱っていないかを見直し、受け入れから利用までの境界と確認の役割を整理して考えましょう。個別の仕組みを暗記するより、前提の置き方に注目してください。

この問題で問われていること

一つの観点として、入力がシステム内の別の処理へ渡る各段階で、前提となる信頼性が保たれているか、また確認を置く位置が適切かに注目してください。判断の軸をこの境界に絞ると整理しやすくなります。

視点

外部入力を検討するときは、値の出所だけで判断せず、どの処理がどの前提で受け取っているかを順に整理します。処理の境界ごとに信頼の置き方が変わり得るため、想定する利用場面と確認の責任範囲を切り分けて考えると、論点を比較しやすくなります。

確認ポイント

  • 入力がどの処理境界を越えて使われるか確認する
  • 各処理が置いている前提を整理する
  • 確認の責任範囲が曖昧になっていないか見る
正解と解説を見る

正解

ウ

解説

SQLインジェクションは、入力値に含まれる特殊な文字列がSQL文の一部として解釈され、意図しない検索や更新を引き起こす攻撃です。対策では入力値を安全に扱い、SQLの命令として実行されないようにする。

理由

SQLインジェクション対策では、利用者から受け取った入力文字列がSQL文の構文として解釈されないようにする必要がある。選択肢ウは、特殊文字を無効にするエスケープ処理を行うため、この目的に合致する。

比較

GETとPOSTの選択、利用者認証、HTTPSによる暗号化は、それぞれ通信方法、利用者確認、通信経路の保護に関する対策です。これらだけでは、入力値がデータベース側でSQLとして解釈される問題は防げない。

選択肢ア

これは不正解だよ。GETとPOSTはデータを送信する方式の違いであり、POSTを使っても入力値そのものにSQL文として解釈される文字列が含まれる可能性は残る。送信方式の変更だけでは、SQLインジェクション対策にはならない。

選択肢イ

これは不正解だよ。利用者認証は、誰が入力を送ったかを確認するための仕組みである。しかし、正規に認証された利用者が悪意のある入力を送る可能性もあるため、認証だけでは入力値がSQL文として解釈される問題を防止できない。

選択肢ウ(正解)

これは正解だよ。入力文字列をエスケープ処理して特殊文字を無効にすると、入力中の記号がSQL文の構文として扱われにくくなる。これにより、入力値が意図しないSQL命令として実行されることを防ぐSQLインジェクション対策になる。

選択肢エ

これは不正解だよ。HTTPSは通信中のデータを暗号化し、盗聴や改ざんのリスクを抑えるための仕組みである。一方、SQLインジェクションはサーバ側で入力値がSQL文として解釈される問題なので、HTTPSを使うだけでは防げない。

学習のポイント

入力値の無害化と、通信保護・認証との役割の違いを整理する。

出典:独立行政法人 情報処理推進機構(IPA)平成21年度秋期 システムアーキテクト試験 午前Ⅱ 問4(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針