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

平成22年度秋期 情報処理安全確保支援士 午前Ⅱ 問8

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

問題

SQLインジェクション攻撃を防ぐ方法はどれか。

選択肢

  1. ア
    入力から、 上位ディレクトリを指定する文字列 (../) を取り除く。
  2. イ
    入力中の文字がデータベースへの問合せや操作において特別な意味をもつ文字として解釈されないようにする。
  3. ウ
    入力にHTMLタグが含まれていたら、 解釈. 実行できないほかの文字列に置き換える。
  4. エ
    入力の全体の長さが制限を超えていたときは受け付けない。
解き方のヒントを見る

入力データが「SQLのプログラム命令」として解釈されるのを防ぐのが、根本的なSQLインジェクション対策

脆弱性「SQLインジェクション」を防ぐ根本的な考え方についての問題だよ。この攻撃は、Webサイトの入力フォームに入れた文字が、システムの裏側で動いているデータベース(SQL)の『命令(構文)』の一部として混ざってしまうことが原因なんだ。だから、根本対策は、ユーザーがどんなに怪しいプログラムコードを入力しても、それを単なる「無害な値(文字列データ)」としてデータベースに解釈させ、命令として絶対に実行させないようにすること(プレースホルダの活用など)だよ。

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

ブラウザを攻撃する「XSS」等とは区別し、データベースへの命令を安全にするために「入力された値がSQLのプログラムコード(構文)の一部として解釈されて実行されるのを防止する」アプローチを選び出そう。

SQL 文脈での無害化

SQL インジェクションは、引用符や区切り文字が SQL 構文として効いてしまうと成立します。プレースホルダの利用や適切なエスケープで、入力値を単なる値として扱わせることが基本です。

危険: 入力値が SQL の一部として結合される\n安全: SQL 構文と値を分離する

確認ポイント

  • ../ の除去はパストラバーサル対策です。
  • HTML タグの無効化は XSS 対策寄りです。
  • 長さ制限だけでは文法注入を防げません。
正解と解説を見る

正解

イ

出典

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

選択肢ア

これは不正解だよ。「../」を取り除くのは、勝手に上のフォルダへ移動して本来見られないファイルを見ようとする攻撃への対策なんだ。建物でいうと、客用入口から立入禁止の倉庫に回り込むのを防ぐ感じだね。SQLインジェクションはデータベースへの命令を混ぜる攻撃なので、狙っている場所が違うよ。

選択肢イ(正解)

これは正解だよ。SQLインジェクションは、入力欄からデータベースへの“命令文”をこっそり混ぜ込む攻撃なんだ。窓口で普通の申込書のふりをして、裏に「金庫を開けて」と書いたメモを渡す感じだね。だから、入力された「'」などの特別な文字を命令として扱わないようにすれば、ただの文字として処理できて攻撃を防げるよ。

選択肢ウ

これは不正解だよ。HTMLタグを別の文字列に置き換えるのは、Webページ上で勝手にスクリプトを動かすXSS対策なんだ。掲示板に貼られた危ない貼り紙を、ただの文字として読める形に直すイメージだね。SQLインジェクションはデータベースへの命令混入が問題なので、HTMLタグ対策だけでは防げないよ。

選択肢エ

これは不正解だよ。入力の長さを制限するのは、長すぎるデータでシステムを壊すような攻撃への対策にはなるけど、SQLインジェクションの本質的な対策ではないんだ。短い一言でも「鍵を開けろ」みたいな危ない命令なら問題になるよね。長さだけ見ても、命令として解釈される危険は残るよ。

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

関連する過去問一覧

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