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

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

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

問題

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

選択肢

  1. ア
    WebアプリケーションのWebアプリケーションの実装における対策実装以外の対策
  2. イ
    Webアプリケーション中でシェルを | chroot環境でWebサーバを稼働させ起動しない。 る。
  3. ウ
    |セッションIDを乱数で生成する。 TLSによって通信内容を秘匿する。 パス名やファイル名をパラメタとして | 重要なファイルを公開領域に置かな
  4. エ
    ツ |受け取らないようにする。 い。 データベースのアカウントがもつデーエ | プレースホルダを利用する。 タベースアクセス権限を必要最小限にする。
解き方のヒントを見る

SQLインジェクション対策は、入口を固めて被害も小さくする話だよ

Webアプリでは、SQL文の形と入力値をごちゃ混ぜにしないように、プレースホルダを使って分けて扱うのが基本だよ。たとえるなら、注文票の「商品名を書く欄」に勝手に命令文を書かれても、店員さんがそれを命令として読まないようにするイメージだね。さらに、万一すり抜けられたときに備えて、データベースのアカウント権限は必要最小限にしておこう。

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

この問題では、SQLインジェクションを直接防ぐアプリ側の対策と、もし攻撃されたときの被害を広げない周辺対策の両方を見分けられるかがポイントだよ。

SQL Injection Defense Pair

the proper SQL injection defenses are placeholders in application code plus least-privilege database permissions outside the code

use placeholders\nseparate SQL and values\nminimize DB account privileges

確認ポイント

  • プレースホルダを最優先で見る。
  • DB 権限最小化を組み合わせる。
  • TLS や chroot は別論点。
正解と解説を見る

正解

エ

出典

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

選択肢ア

これは不正解だよ。シェルを起動しない、chrootでWebサーバを閉じ込める、というのは「サーバ上で勝手に命令を実行される攻撃」への備えに近いんだ。SQLインジェクションは、窓口で渡す申込書にこっそり店員への命令を書き足すような攻撃だから、データベースへの命令文そのものを安全に作る対策が必要だよ。

選択肢イ

これは不正解だよ。パス名やファイル名を外から受け取らない、重要ファイルを公開場所に置かない、というのは「見せてはいけないファイルを指定されて読まれる」攻撃への対策だよ。たとえるなら、倉庫の棚番号を客に自由入力させない話で、SQLインジェクションのようにレジ係へ変な命令を混ぜる話とは別物だよ。

選択肢ウ

これは不正解だよ。セッションIDを乱数にする、TLSで通信を暗号化する、というのはログイン中の合鍵を盗まれにくくする対策だよ。SQLインジェクションは、通信路や合鍵の問題ではなく、入力欄からデータベースへの命令を混ぜ込まれる問題なので、狙いが違うんだ。

選択肢エ(正解)

これが正解だよ。プレースホルダは、注文票の「名前を書く欄」と「店員への指示欄」をきっちり分ける仕組みみたいなものだよ。利用者の入力をSQL文の命令として混ぜず、ただの値として扱えるのでSQLインジェクションを防げるんだ。さらにDB権限を必要最小限にしておけば、万一すり抜けられても被害を小さくできるよ。

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

関連する過去問一覧

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