応用情報技術者試験

応用情報・セキュリティを解く(H27秋)後編

今回は、平成 27 年度(2015 年度)秋期の「応用情報技術者試験」の過去問(午後 問1 情報セキュリティ)、後半ですね。始めていきます。

整理

今回は、Cookie の知識がないと解きにくいので、先に Cookie についての知識を整理しておきます。

Cookie とは、Web ブラウザと Web アプリケーションの間で状態を維持する方式のことです。また、この方式を実現するために使うデータ(Web ブラウザに保持されるデータ)を指すこともあります。

以下では、Cookie という用語を、後者(データ)の意味で用います。
また、Cookie を、一連の HTTP のやりとり(例えば、ブックショップで書籍を検索、購入するなど)を実現するために、その状態(セッション)を維持する目的で使うものとします。

Cookie の必要性

そもそも、セッションの維持に、何で Cookie なるものが必要なのかというと、HTTP が状態をもたないプロトコルだからです。

HTTP は TCP 上のプロトコルなので、TCP がコネクションを確立してくれていれば、HTTP で状態を維持しなくてもよさそうですが、そうではありません。

Web アプリケーションは、アプリケーション層である HTTP のメッセージのみを見るからです。また、実際に TCP と HTTP の動作を見てみると、例えば、「TCP のコネクションが確立し、HTTP の通信が一往復したら、TCP のコネクションが切断される」のようになります。

いずれにせよ、HTTP 側で状態を持たなければなりません。

ですので、ブックショップで書籍を購入するなど、一連のやりとりを維持するためには、HTTP のメッセージに、一意の値毎回含めて送信しなければなりません。

セッションを維持する仕組み

このような一連のやりとりを実現するには、例えば、次の絵のような仕組みが必要です。

サーバは、一意の値(ここでは abc123 という ID)を採番し、クライアントに「以降、この ID を送信してください」と伝えます。クライアントはその ID を保持し、毎回サーバに送信します。

この仕組みにおいて、一意の値 abc123 が、Cookie に該当します。

Cookie によるセッションの維持

Cookie によるセッションの維持は、具体的には、この絵のように実現されています。

Web ブラウザから(Cookie のない)リクエストがあったら、Web アプリケーションは Cookie(セッション ID およびそれに関するデータ)を生成し、レスポンス中の Set-Cookie ヘッダに含め、Web ブラウザに送信します。
Web ブラウザは、Set-Cookie ヘッダに指定された Cookie を取得、保持します。このようにして、Web ブラウザに Cookie がセットされます。
※ なお、Web ブラウザに Cookie をセットするには、レスポンスヘッダ Set-Cookie の他に、JavaScript を用いる方法もあります。この場合、レスポンスボディのスクリプト実行箇所に、document.cookie=’id=abc123′; のように記述します

それ以降、Cookie の内容は、リクエスト中の Cookie ヘッダを用いて、Web アプリケーションに毎回毎回送信されます。

Cookie の属性

Cookie を「どの範囲に送信するか」、「いつまで有効にするか」については、属性という形で指定することができます。次の表は、Cookie の属性の例です。

属性名 説明
secure https:// の通信である場合に送信される
https:// の通信では、必ず指定すべき)
domain 指定されたドメインに後方一致する場合に送信される
(指定しない場合は、Cookie をセットしたドメイン)
path 指定されたパスに前方一致する場合に送信される
(指定しない場合は “/”)
expires 指定された日時、期間まで有効(ファイルとして保持する)
本属性が指定されていない場合には、基本的には、Web ブラウザを閉じるまで有効

以上で、Cookie についての知識の整理は完了です。

解説

これを踏まえて、問題を解いていきます。

設問 3 (2)

Cookie を保持し、毎回送信しているのは、Web ブラウザです。正解は、『Web ブラウザ』となります。
※ 実質、選択式の問題です。候補は、「Web ブラウザ」、「メールソフト」、「電子メールアドレス」の 3 つです

設問 3 (3)

図 3 は、よく使われている手順であるため、イメージがわきやすかったと思います(シーケンスの読み取りに慣れていない方は、この問題で慣れるとよいと思います)。

ここでは、悪意をもった第三者のログイン(= アカウント名、パスワードを類推することによるログイン)が拒否される(= ログインできない)理由が問われています。

IPA の解答例は、『ログイン用 Cookie の値を知らないから』です(採点講評を見ると、『Cookie による認証』に言及しなければならないとのこと)。

私は、自信満々で「悪意をもった第三者は、電子メールを受け取れないから」としましたが、点数はもらえなさそうですね。
※ おそらくですが、電子メールに関する言及は (4) でさせたかったからだと思います

設問 3 (4)

『会員登録時に入力した情報』の『有効性を確認』できるのは、「電子メールアドレス」になります。
会員登録時に、実際に電子メールを送信しているからです。送信した電子メールが、それを登録した会員に届けば、その電子メールアドレスは妥当だと言えます。

※ これも、実質、選択式の問題ですね。『会員登録時に入力した情報』から選ぶので、候補は、「アカウント名」、「パスワード」、「電子メールアドレス」の他、「ニックネーム」、「プロフィール」となります

復習

ざっと復習しましょう。今回は、Cookie についてです。

おさらい
  • Cookie とは、セッションを維持するための方式、あるいは、Web ブラウザに格納されるデータのことである
  • Cookie は、Set-Cookie というレスポンスヘッダによりセットされる(JavaScript の document.cookie プロパティでもセットできる)
  • Cookie は、Cookie というリクエストヘッダにより送信される
  • Cookie は、基本的に Cookie をセットした Web アプリケーションに、毎回送信される
  • Cookie には、secure、domain、path、expires などの属性がある。これらにより、Cookie の送信範囲や有効期限を指定できる

以上となります。お疲れさまでした。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です