今回は、平成 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 の送信範囲や有効期限を指定できる
以上となります。お疲れさまでした。
[…] このエントリでは、設問 1、設問 2、設問 3 の (1) を解説します。残りは、別のエントリで解説します […]