情報セキュリティマネジメント試験 練習問題 26:Webアプリケーションの脆弱性対策
SQLインジェクション攻撃への対策について述べた文として、正しいものはどれか。
- プレースホルダを用いたバインド機構で、SQL文と入力データを分離して実行する
- 入力欄の文字数制限を撤廃することで、悪意ある文字列の混入を防止できる
- ユーザーからの入力値を常にそのままSQL文の一部として文字列連結し、実行前に画面表示で確認させる
- データベースへの接続にはすべて最上位の管理者権限を用いることで、権限不足によるエラーを防ぐ
- クライアント側のJavaScriptで入力チェックを行えば、サーバー側での対策は不要である
正解と解説を見る
正解:プレースホルダを用いたバインド機構で、SQL文と入力データを分離して実行する
SQLインジェクションを防ぐ基本的な対策は、SQL文の構造とデータを分離して実行するバインド機構(プレースホルダ)の利用です。
【正解の理由】
プリペアドステートメント(=あらかじめSQL文の型を用意し、後からパラメータを安全に埋め込む仕組み)を使うことで、入力値がSQL文の構文として解釈されることを防げます。
【不正解の理由】
• 「文字数制限を撤廃する」:文字数制限の有無は攻撃可能な文字列の混入自体を防ぐものではなく、直接的な対策にならない
• 「入力値をそのまま文字列連結し画面表示で確認させる」:文字列連結自体がSQLインジェクションを引き起こす典型的な脆弱な実装であり、画面確認は悪意ある入力を防げない
• 「すべて最上位の管理者権限で接続する」:最小権限の原則に反し、攻撃が成功した際の被害を拡大させる
• 「クライアント側のチェックのみで十分」:クライアント側の検証は改ざん・迂回が容易であり、サーバー側での対策が必須である