SC情報処理安全確保支援士試験 午前Ⅱ

平成24年度春期 情報処理安全確保支援士 午前Ⅱ 問16

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

問題

SQLインジェクション対策について、 Webアプリケーションの実装における対策とWebアプリケーションの実装以外の対策として、 ともに適切なものはどれか。

選択肢

  1. ア
    Webアプリケーションの実装における | Webアプリケーションの実装以外の対策対策
  2. イ
    Webアプリケーション中でシェルを起 | chroot環境でWebサーバを実行す動しない。 る。
  3. ウ
    | セッションIDを複雑なものにする。 SSLによって通信内容を秘匿する。
  4. エ
    データベースのアカウントのもつデウ | パインド機構を利用する。 ータベースアクセス権限を必要最小限にする。
解き方のヒントを見る

午前II 問16:SQLインジェクションは“混ぜない・権限を絞る”で防ごう

SQLインジェクション対策の基本は、SQL文という“注文書”と、利用者が入力した値という“メモ”を混ぜないことだよ。プレースホルダやバインド変数を使って、SQLと入力値をきちんと分けよう。さらにDB側では、アプリに必要最小限の権限だけを渡しておくと、万一すり抜けられても被害を小さくできるよ。

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

実装で攻撃を入りにくくする対策と、DB権限を絞って被害を広げない対策の両方を見分けられるかがポイントだよ。

SQL Injection Defense

SQL injection defense combines parameterized queries in the app with least-privilege database permissions

parameterized query\nseparate SQL and input\nleast-privilege DB account

確認ポイント

  • プレースホルダを使う。
  • DB 権限を最小化する。
  • 入力チェックだけで終わらせない。
正解と解説を見る

正解

ウ

出典

問題文と解答は IPA 公開の過去問題冊子・解答例を基にしています。

選択肢ア

これはSQLインジェクション対策としては不正解だよ。『パス名やファイル名をパラメータで受け取らない』『重要ファイルを公開領域に置かない』という対策なら、ディレクトリトラバーサルへの対策なんだ。たとえるなら、客に倉庫の部屋番号を自由に指定させない工夫で、DBに変なSQL命令を混ぜられる問題とは別物だよ。

選択肢イ

これはSQLインジェクション対策としては不正解だよ。Webアプリでシェルを起動しない、chroot環境でWebサーバを動かす、というのはOSコマンドインジェクションなどへの備えに近いんだ。たとえるなら、泥棒に金庫ではなく機械室を触らせない工夫で、今回のDBへの不正な命令を防ぐ本筋とは違うよ。

選択肢ウ(正解)

これはSQLインジェクション対策としては不正解だよ。セッションIDを複雑にしたり、SSL/TLSで通信を暗号化したりするのは、合鍵を盗まれにくくしたり、会話を盗み聞きされにくくする対策なんだ。今回の問題のポイントは、窓口で渡された文字をそのまま命令としてDBに通してしまう危険への対策なので、狙いがずれているよ。

選択肢エ

これは正解だよ。バインド機構は、注文票の『商品名を書く欄』をあらかじめ決めておき、そこに書かれた文字を店員が勝手な命令として読まないようにする仕組みなんだ。さらにDBアカウントの権限を必要最小限にしておけば、万一すり抜けられても、泥棒に倉庫全部の鍵を渡さず一部の棚だけに制限できるので、SQLインジェクション対策として適切だよ。

出典:独立行政法人 情報処理推進機構(IPA)平成24年度春期 情報処理安全確保支援士試験 午前Ⅱ 問16(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

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