情報処理安全確保支援士 令和4春 午後1 問1 No.1

(1)表1 中の下線1について,適切な文字列の例を,解答群の中から選び,記号で答えよ。

下線①には、「改行コードを意味する文字列」と記載されています。

HTTPヘッダインジェクションとは、HTTPリクエストに不正な文字を含ませ、HTTPレスポンスに不正なヘッダフィールドやスクリプトを埋め込むことでWebサーバ上で不正な攻撃をします。


HTTPリクエストはASCIIコードでURLエンコードした文字に置き換えます。

エンコードすることで、URLに使用不可とされる文字をURLに含めることができます。

改行コード「CFLF」をASCIIコードで表現すると、

CF:OD
LF:OA

となります。

文字との区別のために%を付与するパーセントエンコーディングをすると%OD%OAが答えです。

他の解答も確認しましょう。

イ「%20」:ASCIIコードで「空白」を表す文字列です。

ウ「<br>」:HTML上の改行を示すタグ

エ「<p>」:HTML上で段落を表すタグ



(2)表1中の下線2について,名称を, 10 字以内で答えよ。

表1の項番2「SQLインジェクション」とは、検索ボックスや入力フォームなどに記入する文字列に不正な操作を行うSQL文を意図的に「注入」することにより、データベース内のデータの消去や改ざんといった操作やデータの盗用を図る攻撃です。

例えば、次のようなSQLが存在しているとします。

SELECT "user" FROM USER_TABLE WHERE "user" = '$name';



$nameには、ユーザが入力フォームで記入した値が入ります。

もしも、入力フォームに次のような値を入れたとします。

'; INSERT INTO USER_TABLE VALUES (1,'攻撃者のユーザー名','パスワード')--



この入力内容を$nameにはめると、次のSQLになります。

SELECT "user" FROM USER_TABLE WHERE "user" = ''; INSERT INTO USER_TABLE VALUES (1,'攻撃者のユーザー名','パスワード')--'';



1文目のSELECT文は、「”user”=”(空文字)の条件でUSER_TABLEから該当者を探せ」という指示です。
2文目は、USER_TABLEに新しいレコードを追加する指示です。

よって、攻撃者が勝手にSQLを実行することができてしまい、データベースの操作が可能です。


問題点は、「画面で入力された値とSQLを連結し、1つのSQLとして評価・実行する」ことです。

そのため、元のSQL文を固定化してしえば、攻撃者がSQLを実行できなくなります。


ここで登場するのが、プレースホルダーです。

先ほど$nameとしていた場所を、プレースホルダー「?」に置き換えます。

SELECT "user" FROM USER_TABLE WHERE "user" = ?;



ユーザが入力画面で入力したユーザー名は、「?」に代入されます。

併せて、「?」に代入される値は「user」に固定する処理を記載しておきます。

userに固定しておくことで、どのような文字列が入力されてもSQLとして認識することができなくなるんだよ。



解答:プレースホルダー




(3)表1中の(a)に入れる適切な字句を、5字以内で答えよ。

表1の項番3「メールヘッダインジェクション」には、「外部からの入力の全てについて、(a)を削除する。」と記載されています。


メールヘッダインジェクションとは、「お問い合わせフォーム」や「アンケート」などのように特定の相手にメールを送信する機能に対して、入力データを”改ざん”することで、メールの送信先を「悪意のある攻撃者」によって操作する攻撃です。

メールのヘッダには、以下のように送信元メールアドレスやID、タイトル、宛先メールアドレスが記載されています。

引用:メールヘッダ・インジェクションとは | 分かりやすく図解で解説




例えば、タイトルを入力する時にタイトルと「%0d%0aBcc%3a%20△△@△△△.△△」を入力します。



すると、SubjectとToの間に、Bcc:<△△@△△△.△△>を挿入することができます。



このように宛先メールアドレスを追加することができるため、攻撃者によって意図せず関係ない他者にメールが送られてしまうのです。



Bccを追加するためには、改行する必要があるため、外部から入力された改行コードを削除することで、メールヘッダインジェクションを防ぐことができます。



解説:改行コード