(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を追加するためには、改行する必要があるため、外部から入力された改行コードを削除することで、メールヘッダインジェクションを防ぐことができます。
解説:改行コード