システムアーキテクト試験 2009年 午前204


SQLインジェクション対策として実施するものはどれか。
入力データを送る前に、利用者認証を行う。
プロトコルにHTTPSを使用してデータを暗号化する。
入力データを送るときには、GETメソッドではなくPOSTメソッドを使う。
入力文字列をエスケープ処理して特殊文字を無効にする。(正解)

解説

SQLインジェクション対策として実施するものはどれか【午前2 解説】

要点まとめ

  • 結論:SQLインジェクション対策には、入力文字列のエスケープ処理が必須です。
  • 根拠:エスケープ処理により、SQL文の構造を壊す特殊文字を無効化し、不正なSQL実行を防ぎます。
  • 差がつくポイント:単に通信方法や認証を強化するだけではSQLインジェクションは防げず、入力値の適切な処理が重要です。

正解の理由

SQLインジェクションは、ユーザーが入力したデータにSQLの制御文字や命令を混入させ、意図しないSQL文を実行させる攻撃です。
この攻撃を防ぐには、入力文字列中のシングルクォート(')やダブルクォート(")、セミコロン(;)などの特殊文字をエスケープ処理し、SQL文の構造を壊さないようにする必要があります。
したがって、「ウ: 入力文字列をエスケープ処理して特殊文字を無効にする。」が正解です。

よくある誤解

GETメソッドやPOSTメソッドの違いは通信方法の違いであり、SQLインジェクションの防止には直接関係ありません。
また、HTTPSは通信の暗号化を行うだけで、SQL文の安全性には影響しません。

解法ステップ

  1. SQLインジェクションの定義を理解する(ユーザー入力がSQL文に悪影響を与える攻撃)。
  2. 対策として有効な方法を考える(入力値の検証やエスケープ処理)。
  3. 選択肢を見て、SQL文の構造を守る方法を選ぶ。
  4. エスケープ処理がSQLインジェクション対策の基本であることを確認。
  5. 他の選択肢は通信方法や認証であり、SQLインジェクション対策として不十分と判断。

選択肢別の誤答解説

  • ア: GETメソッドとPOSTメソッドはHTTPの送信方式の違いであり、SQLインジェクションの防止には直接関係ありません。
  • イ: 利用者認証はアクセス制御には有効ですが、入力値の不正操作を防ぐものではありません。
  • ウ: 入力文字列のエスケープ処理により、SQL文の構造を壊す特殊文字を無効化し、SQLインジェクションを防止します。
  • エ: HTTPSは通信経路の暗号化を行うため、盗聴や改ざん防止には有効ですが、SQLインジェクションの防止には無関係です。

補足コラム

SQLインジェクション対策には、エスケープ処理のほかに「プリペアドステートメント(パラメータ化クエリ)」の利用も推奨されます。
プリペアドステートメントはSQL文とパラメータを分離し、特殊文字の影響を受けにくくするため、より安全な対策方法です。

FAQ

Q: なぜPOSTメソッドを使うだけではSQLインジェクションを防げないのですか?
A: POSTはデータ送信方法の違いであり、送信データの内容や処理方法を変えないため、SQL文の不正操作は防げません。
Q: HTTPSはSQLインジェクション対策に役立ちますか?
A: HTTPSは通信の暗号化により盗聴や改ざんを防ぎますが、SQL文の構造を守る対策ではないため、SQLインジェクション対策にはなりません。

関連キーワード: SQLインジェクション, エスケープ処理, プリペアドステートメント, Webセキュリティ, 入力値検証
← 前の問題へ次の問題へ →

©︎2025 情報処理技術者試験対策アプリ