ホーム > システムアーキテクト試験 > 2009年
システムアーキテクト試験 2009年 午前2 問04
SQLインジェクション対策として実施するものはどれか。
イ:入力データを送る前に、利用者認証を行う。
エ:プロトコルにHTTPSを使用してデータを暗号化する。
ア:入力データを送るときには、GETメソッドではなくPOSTメソッドを使う。
ウ:入力文字列をエスケープ処理して特殊文字を無効にする。(正解)
解説
SQLインジェクション対策として実施するものはどれか【午前2 解説】
要点まとめ
- 結論:SQLインジェクション対策には、入力文字列のエスケープ処理が必須です。
- 根拠:エスケープ処理により、SQL文の構造を壊す特殊文字を無効化し、不正なSQL実行を防ぎます。
- 差がつくポイント:単に通信方法や認証を強化するだけではSQLインジェクションは防げず、入力値の適切な処理が重要です。
正解の理由
SQLインジェクションは、ユーザーが入力したデータにSQLの制御文字や命令を混入させ、意図しないSQL文を実行させる攻撃です。
この攻撃を防ぐには、入力文字列中のシングルクォート(')やダブルクォート(")、セミコロン(;)などの特殊文字をエスケープ処理し、SQL文の構造を壊さないようにする必要があります。
したがって、「ウ: 入力文字列をエスケープ処理して特殊文字を無効にする。」が正解です。
この攻撃を防ぐには、入力文字列中のシングルクォート(')やダブルクォート(")、セミコロン(;)などの特殊文字をエスケープ処理し、SQL文の構造を壊さないようにする必要があります。
したがって、「ウ: 入力文字列をエスケープ処理して特殊文字を無効にする。」が正解です。
よくある誤解
GETメソッドやPOSTメソッドの違いは通信方法の違いであり、SQLインジェクションの防止には直接関係ありません。
また、HTTPSは通信の暗号化を行うだけで、SQL文の安全性には影響しません。
また、HTTPSは通信の暗号化を行うだけで、SQL文の安全性には影響しません。
解法ステップ
- SQLインジェクションの定義を理解する(ユーザー入力がSQL文に悪影響を与える攻撃)。
- 対策として有効な方法を考える(入力値の検証やエスケープ処理)。
- 選択肢を見て、SQL文の構造を守る方法を選ぶ。
- エスケープ処理がSQLインジェクション対策の基本であることを確認。
- 他の選択肢は通信方法や認証であり、SQLインジェクション対策として不十分と判断。
選択肢別の誤答解説
- ア: GETメソッドとPOSTメソッドはHTTPの送信方式の違いであり、SQLインジェクションの防止には直接関係ありません。
- イ: 利用者認証はアクセス制御には有効ですが、入力値の不正操作を防ぐものではありません。
- ウ: 入力文字列のエスケープ処理により、SQL文の構造を壊す特殊文字を無効化し、SQLインジェクションを防止します。
- エ: HTTPSは通信経路の暗号化を行うため、盗聴や改ざん防止には有効ですが、SQLインジェクションの防止には無関係です。
補足コラム
SQLインジェクション対策には、エスケープ処理のほかに「プリペアドステートメント(パラメータ化クエリ)」の利用も推奨されます。
プリペアドステートメントはSQL文とパラメータを分離し、特殊文字の影響を受けにくくするため、より安全な対策方法です。
プリペアドステートメントはSQL文とパラメータを分離し、特殊文字の影響を受けにくくするため、より安全な対策方法です。
FAQ
Q: なぜPOSTメソッドを使うだけではSQLインジェクションを防げないのですか?
A: POSTはデータ送信方法の違いであり、送信データの内容や処理方法を変えないため、SQL文の不正操作は防げません。
A: POSTはデータ送信方法の違いであり、送信データの内容や処理方法を変えないため、SQL文の不正操作は防げません。
Q: HTTPSはSQLインジェクション対策に役立ちますか?
A: HTTPSは通信の暗号化により盗聴や改ざんを防ぎますが、SQL文の構造を守る対策ではないため、SQLインジェクション対策にはなりません。
A: HTTPSは通信の暗号化により盗聴や改ざんを防ぎますが、SQL文の構造を守る対策ではないため、SQLインジェクション対策にはなりません。
関連キーワード: SQLインジェクション, エスケープ処理, プリペアドステートメント, Webセキュリティ, 入力値検証