情報処理安全確保支援士 2020年 秋期 午後2 問01
百貨店におけるWebサイトの統合に関する次の記述を読んで、設問1~5に答えよ。
C社は、半年ほど前に旧A社と旧B社が合併してできた会社である。旧B社が存続会社となり、旧A社の事業を承継した上で、C社に改称した。C社は、旧A社の10店舗の百貨店(以下、A百貨店という)と、旧B社の5店舗の百貨店(以下、B百貨店という)を運営している。
C社は、旧A社が発行していたクレジットカードの会員向けWebサイト(以下、サイトPという)、A百貨店の取扱商品を販売するオンラインストアWebサイト(以下、サイトQという)、及び旧B社のポイントカードを保有する会員向けWebサイト(以下、サイトRという)を運営している。
合併後、旧A社クレジットカードのB百貨店での利用を促進したり、旧B社ポイントカードのA百貨店での利用を可能にしたりするなど、両社の顧客サービスの融合に力を入れている。表1は、サイトP、Q、Rの概要である。

〔機器の集約と運用作業の効率化〕
C社では、運用作業を効率化するために、別々の場所に設置されていた各サイトを構成する機器を1か所のデータセンタに集約するとともに、これらの機器を管理するWeb管理課を新設した。機器集約後のネットワーク構成は図1のとおりである。

サイトP、Q、Rは、それぞれ独立して運営されている。いずれのサイトも、アカウント情報はサイトごとに設置したLDAPサーバのユーザエントリとして管理しており、ログイン時の認証には、各LDAPサーバのユーザエントリ内の利用者IDとパスワードを利用している。
〔サイト間でのアカウントの共通利用〕
C社では経営戦略の一環として、三つのサイトで収集した情報から顧客の購買傾向を分析することにした。そこで、サイトP、Q、Rでクロス分析などの手法を用いて購買傾向を分析する上で、各サイト間で同一の顧客を特定するために、サイトP、Q、R相互間でのアカウントの共通利用を実現することにした。
アカウントの共通利用では、次の三つの利用方法のいずれかを各顧客に選択してもらうことにした。
(1)サイトPのアカウントを親アカウントとし、サイトQ,Rのアカウントを子アカウントとして、子アカウントを親アカウントに紐付ける。主に旧A社の顧客向けである。
(2)サイトRのアカウントを親アカウントとし、サイトP,Qのアカウントを子アカウントとして、子アカウントを親アカウントに紐付ける。主に旧B社の顧客向けである。
(3)アカウントの共通利用をしない。
顧客がアカウントの紐付けを設定すれば、子アカウントの代わりに親アカウントを用いて各サイトにログインできる。
〔アカウントの共通利用の設計〕
Web管理課のJ主任は、アカウントの共通利用の設計を任された。J主任は、アカウントの共通利用を実現するために、次の四つを行うことにした。
(1)サイトP、Q、Rのログイン処理を変更する。
(2)LDAP-P、LDAP-Rで管理するアカウント情報に、紐付け情報を保存する。具体的には、LDAP-PのユーザエントリにsiteQid、siteRid属性を追加して、当該アカウントに紐付けた子アカウントの利用者IDを保存する。LDAP-Rのユーザエントリには、sitePid、siteQid属性を追加する。
なお、紐付け前のsitePid、siteQid、siteRidには、空文字列が設定される。
(3)Web-P、Web-RのWebアプリケーションプログラム(以下、WebアプリケーションプログラムをWebアプリという)に、アカウントの紐付け機能を追加する。
サイトPのアカウントを親アカウントとし、サイトQのアカウントを子アカウントとして紐付けるときのサイトPの画面と処理内容は図2のとおりである。

(4)FW-P、Q、Rのルールに対して必要な変更を行う。例えば、変更後のFW-Pのルールは、表2のようにする。
〔個人情報の取扱い〕
J主任は、C社の法務担当のMさんに、アカウントの共通利用について説明し、個人情報の取扱いの観点から問題がないかどうか相談した。Mさんは、合併前後の個人情報の利用目的の内容について確認した。
確認後、Mさんは、アカウントの共通利用には、顧客に対して利用目的の変更を通知して、同意を得る必要があると指摘した。
指摘を受け、J主任は、顧客がアカウントの共通利用を選択したときに、個人情報の利用目的の変更を通知するとともに、変更後の利用目的を明示して同意を得る機能を加えることにした。
〔コードレビュー〕
アカウントの共通利用の設計を終えたJ主任は、サイトPのWebアプリの改修に着手した。
図3及び図4は、サイトPのアカウントにサイトQのアカウントを紐付ける場合のサイトP上での紐付け処理のJavaソースコードである。
利用者が、サイトPにログイン後、図2の画面を操作し、“紐付け”ボタンをクリックした場合、図4の行番号101のsiteIDにサイトの識別文字列として“siteQ”が代入された状態で図4のコードの実行が開始される。図4のコードが正常に終了したら、紐付けが完了したことを表示する。
J主任は、情報処理安全確保支援士(登録セキスペ)のK主任とともにコードレビューを実施した。K主任は、次のような特定の状況では、サイトPのある利用者のアカウントに、サイトQの他人のアカウントが紐付いてしまうと指摘した。
(1)図2で、サイトQの利用者ID欄に誤った利用者IDを入力する。
(2)図4のコードが呼び出され、cに誤った利用者IDが代入されたまま、dが呼び出される。
(3)何らかの理由で、d中の図3中の行番号eでfが発生し、結果としてdが再試行される。
(4)dが3回試行され、全て同じくfが発生すると、gの値はtrueなので、図4中の行番号hに進み、紐付けが行われる。
K主任は、図3中の32行目前後に着目し、iという修正案を提示した。
〔サイトRでのインシデント〕
リリースに向けて準備を進めていたところ、インシデント発生の報告があった。発端は、ある顧客からの指摘で、その内容は、“サイトRのキャンペーン応募履歴を見たら、3月のキャンペーンに応募したことになっているが、身に覚えがない。3月にはサイトRに一度もアクセスしていないはずだ。”というものであった。
J主任が、サイトRのアクセスログを確認したところ、次のことが分かった。
・3月30日に、当該顧客のアカウントでキャンペーンに応募していた。
・応募の直前にパスワード失念時の処理を実行し、パスワードを電子メール(以下、メールという)で未登録のメールアドレスに送信した記録がある。
・3月25日から3月31日に掛けて、サイトRへの通信量が増加傾向にあった。
図5は、サイトRのパスワード失念時の操作画面である。

J主任は、攻撃者がパスワード失念時の処理を悪用して、会員番号及び誕生日を総当たりで入力し、たまたま合致した当該顧客のアカウントを乗っ取ったものと判断した。J主任は、このインシデントについてWeb管理課のL課長に報告した。L課長は旧A社出身で、この報告でサイトRのパスワード失念時の操作を初めて知った。次は、その報告の時のL課長とJ主任の会話である。
L課長:サイトRのパスワード失念時の処理には、三つの問題があるね。一つ目は、本人であることを確認するための情報が少なすぎるという問題だ。そこは後で解決するとしよう。二つ目は、パスワードそのものをメールで送るという問題だ。三つ目は、jという問題だ。二つ目と三つ目の問題の解決には、kように改修すべきだ。この方法では、一部の利用者はパスワード失念時にログインできなくなるが、その場合はコールセンタで対応することにしよう。
J主任:はい。分かりました。
L課長:サイトRでは、攻撃者がアカウントを乗っ取ったとしても、あまり経済的利益を得られないので、今回のような被害で済んだと考えられるが、直ちに改修を完了させてほしい。もしもこれらの問題に気付かずにアカウントの共通利用を提供していたら、①利用者に更に大きな被害が発生するところだった。アカウントの共通利用の設計、及びリリースまでのスケジュールも見直してほしい。
〔アカウントの共通利用の設計の見直し〕
J主任は、次のように全面的に設計を見直し、承認を得た。
・サイトSを立ち上げ、新たにサイトSのアカウントを発行して管理する。
・アカウントの共通利用に当たり、アカウントの紐付け時とサイトP、Q、Rへのログイン時には、SAMLプロトコルのWeb Browser SSO Profileを用いる。サイトSが、IdP(Identity Provider)となり、サイトP、Q、Rは、SP(Service Provider)となる。
・サイトQには、サイトQのアカウントでも、サイトQのアカウントと紐付けたサイトSのアカウントでもログインできる。サイトP、Rも同様である。
図6は、Web Browser SSO Profileの基本的な通信の流れである。
図7は、紐付け済みのサイトSのアカウントでサイトQにログインするときの画面遷移図である。
図8は、サイトQのアカウントとサイトSのアカウントを紐付けるときの画面遷移図である。
〔見直し後のアカウント共通利用の提供開始〕
C社は、サイトP、Q、Rの改修とサイトSの開発を完了して、アカウント共通利用の提供を開始し、順調に運用を続けた。サイトP、Q、Rのアカウントの廃止、及びサイトSのアカウントへの統合を目指している。この統合が実現すれば、図7の(あ)や、図8の(え)、(お)などの画面は不要となり、より使いやすいサイトを実現できる。
設問1:
問題文を見る模範解答
a:LDAP-P、LDAP-Q、LDAP-R
b:LDAP
解説
解答の論理構成
- 【問題文】には、“変更後のFW-Pのルールは、表2のようにする。”とあり、表2のabは“Web-P ➜ 他サイトのLDAPサーバへ認証問い合わせ”を許可する新設ルールである。
- 図2の処理説明では
“(i) Web-PのWebアプリが、LDAP-Qに問合せて…認証を行う。”
と明記され、図3のsiteQAuthメソッドもLDAP-Q/LDAP-Rへの通信を想定している。 - さらに、Web-Pは従来から自サイトの認証にもLDAP-Pを使用している(ログイン時の認証は“各LDAPサーバのユーザエントリ内の利用者IDとパスワードを利用している。”)。
- よって、Web-Pから到達すべき宛先は “LDAP-P、LDAP-Q、LDAP-R” の三つ、通信プロトコルはLDAPで統一される。
- 以上より
a “LDAP-P、LDAP-Q、LDAP-R”
b “LDAP”
が妥当となる。
誤りやすいポイント
- 「自サイトなのでFW-Pを通らない」と誤解し、“LDAP-P” を除外してしまう。実際には“LDAP-P、FW-P、Web-P”が一列配置されており、横並びでもファイアウォールを経由する構成である。
- “プロトコル: TCP” と答えてしまうケース。表2の他項目で“LDAP”と明示的に書かれているため、同じ粒度で“LDAP”と記載するのが適切である。
- “宛先”欄をIPアドレスレンジで答えようとするミス。設問は字句(機器名)を問うており、機器名で記載する必要がある。
FAQ
Q: Web-PがLDAP-Pにアクセスするルールは既存ではないのですか?
A: 旧構成ではサイト間通信が禁止されており、Web-P ➜ LDAP-Pの通信も個別に許可する必要があります。そのため新ルールで“LDAP-P”も含めています。
A: 旧構成ではサイト間通信が禁止されており、Web-P ➜ LDAP-Pの通信も個別に許可する必要があります。そのため新ルールで“LDAP-P”も含めています。
Q: プロトコルは“389/TCP”と書いても正しいですか?
A: 表2に合わせた解答は“LDAP”というサービス名です。ポート番号のみでは設計書の粒度と一致しません。
A: 表2に合わせた解答は“LDAP”というサービス名です。ポート番号のみでは設計書の粒度と一致しません。
Q: “LDAPS”にすべきでは?
A: 本問題ではLDAPの暗号化有無に触れておらず、元表2も“LDAP”表記のため、解答もそれに合わせます。
A: 本問題ではLDAPの暗号化有無に触れておらず、元表2も“LDAP”表記のため、解答もそれに合わせます。
関連キーワード: LDAP, ファイアウォール、認証連携、アクセス制御、ルール設定
設問2:
問題文を見る〔個人情報の取扱い〕について、旧A社と旧B社の合併によるC社への事業承継に伴って取得した個人情報の取扱いに関し、個人情報保護法に定められている禁止事項は何か。70字以内で述べよ。
模範解答
本人の同意を得ないで、承継前における当該個人情報の利用目的の達成に必要な範囲を超えて、当該個人情報を取り扱ってはならない。
解説
解答の論理構成
- 【問題文】では、合併後に「サイトP、Q、Rでクロス分析などの手法を用いて購買傾向を分析」するために、三サイト間でアカウントを共通利用すると説明しています。
- しかし法務担当のMさんは「アカウントの共通利用には、顧客に対して利用目的の変更を通知して、同意を得る必要がある」と指摘しました。
- これは、旧A社・旧B社が取得していた個人情報をC社が新たな分析目的で利用する行為が、承継前の「利用目的の達成に必要な範囲」を超える恐れがあるためです。
- 個人情報保護法は、本人の同意を得ないまま「利用目的の達成に必要な範囲を超えて」個人情報を取り扱うことを禁止しています。
- よって、禁止事項は「本人の同意を得ないで、承継前における当該個人情報の利用目的の達成に必要な範囲を超えて、当該個人情報を取り扱うこと」と導けます。
誤りやすいポイント
- 「第三者提供の禁止」と混同し、利用目的の範囲を超えた内部利用も同意が必要である点を見落とす。
- 事業承継=同一事業体と解釈し、利用目的の再確認や同意取得を不要と考えてしまう。
- 「利用目的の変更を通知」だけで足りると誤解し、本人同意(オプトイン)まで求められることを忘れる。
FAQ
Q: 事業承継の場合でも同意が必要なのですか?
A: 旧会社で取得した目的を超えて新会社が利用する場合は、新たな利用目的として本人の同意が必要です。
A: 旧会社で取得した目的を超えて新会社が利用する場合は、新たな利用目的として本人の同意が必要です。
Q: 目的変更の通知を出せば利用できますか?
A: 通知だけでは不十分です。利用目的が変わる場合は「本人の同意」を得なければ取り扱えません。
A: 通知だけでは不十分です。利用目的が変わる場合は「本人の同意」を得なければ取り扱えません。
Q: 共同利用のスキームにすれば同意は不要ですか?
A: 共同利用でも目的外利用は認められません。共同利用要件を満たすと共に、範囲を超える場合は同意が必要です。
A: 共同利用でも目的外利用は認められません。共同利用要件を満たすと共に、範囲を超える場合は同意が必要です。
関連キーワード: 個人情報、利用目的、本人同意、事業承継、オプトイン
設問3:〔コードレビュー〕について、(1)〜(3)に答えよ。
問題文を見る(1)本文中のc、d、f、gに入れる適切な字句を、解答群の中から選び、記号で答えよ。
解答群
ア:idPair.checkChild()
イ:idPair.childChecked
ウ:idPair.childID
エ:idPair.childPW
オ:idPair.childSite
カ:idPair.makeLink()
キ:idPair.parentID
ク:idPair.siteQAuth()
ケ:NamingException
コ:return ERROR_ID_OR_PW
サ:return NO_ERROR
模範解答
c:ウ
d:ア
f:ケ
g:イ
解説
解答の導き方
- [c] が何かを特定する
- 図4の101行には「AccountLink idPair = new AccountLink(siteID, userID, userPassword, loginId);」とあります。ここでコメントに「userIDには、紐付けるアカウントの利用者ID」と明記されています。
- 図3のコンストラクタ(11〜16行)を見ると「childID = id;」と代入しています。つまり呼び出し元のuserIDはコンストラクタでchildIDに格納されます。
- 以上より [c] にはidPair.childIDが入るため、選択肢は ウ です。
- [d] が何を指すかを特定する
- 図4の106行には「result = idPair.checkChild();」と明示されています。したがって呼ばれる処理はidPair.checkChild() であり、選択肢は ア です。
- [f] と [g] の因果関係を読み取る
- 図3のcheckChild()の冒頭(19行)に「childChecked = childSite.equals("siteQ") || childSite.equals("siteR");」とあり、サイト識別が正当ならchildCheckedを先にtrueに設定しています。
- siteQの分岐を見ると、26行で「if (siteQAuth(childID, childPW) == NO_ERROR) { childChecked = true; } else { childChecked = false; }」と認証結果に応じてchildCheckedを上書きする処理がありますが、31行の「catch (NamingException e) { throw e; }」では例外をそのまま再スローしています。さらに図3のsiteQAuthの説明に「必要な通信ができないなど、認証そのものが実行できない場合、例外NamingExceptionを投げる。」とあります。
- よってsiteQAuthの実行中に通信障害等で例外が発生すると(この例外はNamingException)、catchで再スローされtryブロック内のchildCheckedの上書き処理が実行されず、先に設定されたtrueの値が残ります。
- 図4の再試行ループ(103〜115行)で3回とも同じNamingExceptionが発生すると、ループを抜けた後の113行の「if (!idPair.childChecked) { return AccountLink.ERROR_LINK_FAILED; }」の判定はchildCheckedがtrueのためスキップされ、116〜117行でidPair.makeLink() が呼ばれて紐付けが実行されてしまいます。
- したがって例外の型はNamingException(ケ)、ループ後に評価される変数はidPair.childChecked(イ)です。
まとめ(本文の流れで導いた解):
c → ウ(idPair.childID)
d → ア(idPair.checkChild())
f → ケ(NamingException)
g → イ(idPair.childChecked)
c → ウ(idPair.childID)
d → ア(idPair.checkChild())
f → ケ(NamingException)
g → イ(idPair.childChecked)
誤りやすいポイント
- childCheckedは「認証成功時のみtrueになる」と早合点すること。実際は図3行19で先にchildCheckedをtrueに設定しており、例外で上書きされなければtrueのまま残ります。
- ループ内の戻り値resultとオブジェクトの状態childCheckedを混同すると誤読します。図4ではループ中にresultを見ている一方、ループ後の判定はidPair.childCheckedを参照しています。
- 例外発生時の制御フローを見落とすと誤答します。catchが再スローしている箇所では、以降の上書き処理が実行されない点に注意してください。
FAQ
Q: なぜNamingExceptionが起きると他人のアカウントが紐付いてしまうのですか?
A: 図3行19でchildCheckedを先にtrueに設定しているため、siteQAuthが通信障害などでNamingExceptionを投げて再スローされると、tryブロック内でchildCheckedをfalseに上書きする処理が走らずにtrueのまま残ります。図4のループ後判定がchildCheckedを使っているため、そのままmakeLinkが呼ばれてしまいます。
A: 図3行19でchildCheckedを先にtrueに設定しているため、siteQAuthが通信障害などでNamingExceptionを投げて再スローされると、tryブロック内でchildCheckedをfalseに上書きする処理が走らずにtrueのまま残ります。図4のループ後判定がchildCheckedを使っているため、そのままmakeLinkが呼ばれてしまいます。
Q: どのように修正すべきですか?
A: 実務的にはどちらかを行います(少なくとも一つ)。(1) checkChild() の先頭でchildCheckedをfalseで初期化し、認証成功時のみtrueを設定する、または (2) catchブロックで例外発生時にchildCheckedをfalseに明示的に設定してから例外を再スローする、あるいは (3) 図4側でmakeLinkを行う条件をidPair.childCheckedではなくcheckChild() の戻り値(resultがNO_ERROR)だけにする、のいずれかです。これらにより例外時に誤った紐付けが行われるリスクを防げます。
A: 実務的にはどちらかを行います(少なくとも一つ)。(1) checkChild() の先頭でchildCheckedをfalseで初期化し、認証成功時のみtrueを設定する、または (2) catchブロックで例外発生時にchildCheckedをfalseに明示的に設定してから例外を再スローする、あるいは (3) 図4側でmakeLinkを行う条件をidPair.childCheckedではなくcheckChild() の戻り値(resultがNO_ERROR)だけにする、のいずれかです。これらにより例外時に誤った紐付けが行われるリスクを防げます。
Q: NamingExceptionはどこで発生しますか?
A: siteQAuthの内部でLDAP等への通信が必要な処理があり、「必要な通信ができないなど、認証そのものが実行できない場合、例外NamingExceptionを投げる」と記載されています(図3のsiteQAuthの説明)。通信障害やLDAPの応答異常で発生します。
A: siteQAuthの内部でLDAP等への通信が必要な処理があり、「必要な通信ができないなど、認証そのものが実行できない場合、例外NamingExceptionを投げる」と記載されています(図3のsiteQAuthの説明)。通信障害やLDAPの応答異常で発生します。
関連キーワード: LDAP、例外処理、リトライ、認証、状態変数
設問3:〔コードレビュー〕について、(1)〜(3)に答えよ。
問題文を見る模範解答
e:ウ
h:キ
解説
解答の論理構成
-
“何らかの理由で、d中の図3中の行番号eでfが発生”
– 図3を見るとcatch (NamingException e) { の直後、行番号32でthrow e; が実行されます。ここが NamingException を発生(再スロー)させる箇所であり、外側の再試行ロジックに制御が戻るポイントです。したがって
– e = 図3行番号32 → 解答群で該当する記号は “ウ”。 -
“図4中の行番号hに進み、紐付けが行われる。”
– 図4ではidPair.makeLink(); が実際にLDAPへ紐付けを書き込む処理です。これは行番号117に位置しています。
– よってh = 図4行番号117 → 解答群で該当する記号は “キ”。 -
なぜ誤った利用者IDでも紐付くのか
– 行番号19でchildChecked = childSite.equals("siteQ") … により サイト識別文字列だけでchildCheckedがtrue になる。
– 行番号32でNamingExceptionが発生し再試行しても、childCheckedはtrueのまま維持。
– 3回の再試行後、図4行番号113のif (!idPair.childChecked) がfalseとなり、行番号117 idPair.makeLink() に到達してしまう。
– この一連の流れが設問本文の説明と一致するため、上記行番号の選択が妥当と結論付けられます。
誤りやすいポイント
- 例外が投げられる“場所”と“原因”の混同
NamingExceptionは行番号26のsiteQAuth呼び出し内部で起きるものと思い込みやすいが、再スローされる行番号32が指定箇所。 - childCheckedの更新タイミング
認証未完了でも行番号19でtrueになるため、ループ後の判定条件を見落とすと誤答に結び付く。 - 行番号117と116の取り違え
紐付けそのものは117行目、116行目はtryブロック開始。処理主体の行を正確に把握する必要がある。
FAQ
Q: 例外が起きてもchildCheckedがtrueのままなのはなぜですか?
A: 行番号19で “サイト識別文字列が正当か” だけを判定しtrueにしているため、その後に認証失敗や例外が発生しても上書きされません。
A: 行番号19で “サイト識別文字列が正当か” だけを判定しtrueにしているため、その後に認証失敗や例外が発生しても上書きされません。
Q: ループが3回で打ち切られる理由は?
A: 図4行番号103のretryCount < 4が条件です。1 〜 3回の試行後に抜ける設計になっています。
A: 図4行番号103のretryCount < 4が条件です。1 〜 3回の試行後に抜ける設計になっています。
Q: 再試行回数を増やせば安全になりますか?
A: 回数を増やしても本質的な問題(childCheckedが誤ってtrueになるロジック)は変わりません。例外発生時にはchildCheckedをfalseに戻す、またはループ終了後に再認証する設計が必要です。
A: 回数を増やしても本質的な問題(childCheckedが誤ってtrueになるロジック)は変わりません。例外発生時にはchildCheckedをfalseに戻す、またはループ終了後に再認証する設計が必要です。
関連キーワード: 例外処理、LDAP, 再試行制御、フラグ管理、認証ロジック
設問3:〔コードレビュー〕について、(1)〜(3)に答えよ。
問題文を見る(3)本文中のiに入れる適切な処理内容を50字以内で具体的に述べよ。
模範解答
i:NamingExceptionを投げる前に、childCheckedをfalseにする
解説
解答の論理構成
- 【問題文】には、誤った利用者IDを入力し、d=checkChild() が3回再試行されても、
“gの値はtrueなので、図4中の行番号hに進み、紐付けが行われる。” とあります。
ここで g はchildChecked、h はidPair.makeLink() 直前の判定です。 - childCheckedが誤って true のままになる原因は、図3の26〜32行にあるtry‐catchブロックです。
32行でNamingExceptionを発生させてcatchへ伝搬する際、childCheckedをfalseに戻す処理が存在しません。
26: if (siteQAuth(childID, childPW) == NO_ERROR) {
27: childChecked = true;
...
32: throw e;
- そのため、最初の認証でchildChecked = trueになった直後にNamingExceptionが投げられると、 ループを抜けてもchildCheckedは true のまま保持され、誤ったIDでも紐付けが成立します。
- よって、32行目前後で “i” として求められる修正は
“NamingExceptionを投げる前にchildChecked = falseを設定する” ことになります。
これにより、例外発生時は必ずchildChecked == falseとなり、図4の
if (!idPair.childChecked) { return AccountLink.ERROR_LINK_FAILED; } が働いて紐付け処理を中断できます。
誤りやすいポイント
- 例外処理=エラー終了と短絡し、フラグ変数の状態遷移を見落とす。
- checkChild() から返される戻り値だけを注視し、メンバ変数childCheckedの副作用を確認しない。
- 32行目のthrow e; を「再スローだから問題ない」と考え、例外発生時にフラグをリセットする必要性に気付かない。
FAQ
Q: ループを3回回しているのに、なぜ誤紐付けが起こるのですか?
A: いずれの試行でもNamingExceptionが発生すると、戻り値の判定は行われずchildCheckedが以前の値のまま残ります。その結果、ループ後のフラグ判定に失敗します。
A: いずれの試行でもNamingExceptionが発生すると、戻り値の判定は行われずchildCheckedが以前の値のまま残ります。その結果、ループ後のフラグ判定に失敗します。
Q: childCheckedをfalseにする以外の対策はありますか?
A: 例外発生時に戻り値でエラーを伝え、フラグに依存しない方法もありますが、既存コードを最小変更で修正するならフラグのリセットが妥当です。
A: 例外発生時に戻り値でエラーを伝え、フラグに依存しない方法もありますが、既存コードを最小変更で修正するならフラグのリセットが妥当です。
Q: 例外を握り潰してERROR_ID_OR_PWを返す方法では駄目でしょうか?
A: LDAP接続障害などの真正エラーと認証失敗を区別できなくなるため、業務要件的に好ましくありません。例外は上位へ投げつつ、フラグだけリセットするのが適切です。
A: LDAP接続障害などの真正エラーと認証失敗を区別できなくなるため、業務要件的に好ましくありません。例外は上位へ投げつつ、フラグだけリセットするのが適切です。
関連キーワード: 例外処理、フラグ管理、再試行制御、認証フロー、入力検証
設問4:〔サイトRでのインシデント〕について、(1)〜(3)に答えよ。
問題文を見る(1)本文中のjに入れる適切な内容を40字以内で述べよ。
模範解答
j:パスワードを、本人以外のメールアドレスに送ることができる
解説
解答の論理構成
- 問題文には、インシデント調査の結果として
“パスワードを電子メール…で未登録のメールアドレスに送信した記録がある。”
と明記されています。この時点で“登録済み以外のアドレスへ送信できる”仕様が判明します。 - 会話シーンでL課長は
“二つ目は、パスワードそのものをメールで送るという問題だ。三つ目は、jという問題だ。”
と述べています。二つ目が「平文パスワードを送信」であるため、三つ目は“送信先メールアドレスの適切な制限がない”ことだと導けます。 - 図5の画面には“新たなメールアドレスに現在のパスワードをメールで送信”ボタンが存在し、本人確認を経ずに第三者が自由なアドレスを指定できる設計になっています。
- 以上から j に入る内容は
“パスワードを、本人以外のメールアドレスに送ることができる”
が適切となります。
誤りやすいポイント
- 「本人確認情報が少なすぎる」をそのまま入れてしまう
→ それは会話中で“一つ目”と明示されており、j ではありません。 - 「メールを暗号化していない」を挙げてしまう
→ 二つ目の“パスワードそのものをメールで送る”に内包される別論点であり、三つ目とは異なります。 - 画面仕様から“新規メールアドレス入力”の危険性を見落とす
→ 未登録アドレス可という仕様に気付けないと誤答になりがちです。
FAQ
Q: “本人以外のメールアドレス”とは具体的に何を指しますか?
A: 利用者がアカウント登録時に設定していないメールアドレス、つまり攻撃者が自由に入力できる外部アドレスのことです。
A: 利用者がアカウント登録時に設定していないメールアドレス、つまり攻撃者が自由に入力できる外部アドレスのことです。
Q: 既登録アドレスへの送信も危険なのでは?
A: 平文送信自体は二つ目の問題です。三つ目は“宛先が本人かどうか確認できない”という別軸のリスクとして指摘されています。
A: 平文送信自体は二つ目の問題です。三つ目は“宛先が本人かどうか確認できない”という別軸のリスクとして指摘されています。
Q: この対策としては何が推奨されますか?
A: パスワード送信を廃止し、登録済みアドレスへワンタイムURLを送って再設定させる方式が一般的です。
A: パスワード送信を廃止し、登録済みアドレスへワンタイムURLを送って再設定させる方式が一般的です。
関連キーワード: パスワードリセット、ワンタイムURL, メール認証、なりすまし、入力値検証
設問4:〔サイトRでのインシデント〕について、(1)〜(3)に答えよ。
問題文を見る(2)本文中のkに入れる適切な内容を40字以内で述べよ。
模範解答
k:パスワードリセットのURLを、登録済みメールアドレスだけに送る
解説
解答の論理構成
- 【問題文】には、“二つ目は、パスワードそのものをメールで送るという問題だ。三つ目は、jという問題だ。二つ目と三つ目の問題の解決には、kように改修すべきだ。”とあります。
- 二つ目の問題「パスワードそのものをメールで送る」は、漏えいリスクが高く、現行の安全指針では推奨されません。
- 三つ目の問題(j)は、図5の“新たなメールアドレスに現在のパスワードをメールで送信”機能から読み取れる“登録済み以外のメールアドレスへも送信できてしまう”点です。
- これら二つの問題を同時に解決する改修方法としては、
・パスワード自体を送らない(リセットURL方式)
・送信先を「登録済みメールアドレスのみに限定」
が不可欠です。 - したがって k には「パスワードリセットのURLを、登録済みメールアドレスだけに送る」が入ります。
誤りやすいポイント
- 「パスワード再発行メールを送る」とだけ書くと、“送信先制限”が抜け落ち減点対象になります。
- 「ワンタイムパスワードを送る」とすると、結局“未登録メールアドレスにも送れる”問題を解決していません。
- リセットURL方式の主眼は“パスワードを平文で送らない”ことであり、単に暗号化通信を挙げると論点がずれます。
FAQ
Q: 平文でなくハッシュ化して送れば良いのでは?
A: 受信者がハッシュを元に戻せないためログインできず、実運用になりません。安全に再設定できるリセットURL方式が一般的です。
A: 受信者がハッシュを元に戻せないためログインできず、実運用になりません。安全に再設定できるリセットURL方式が一般的です。
Q: 登録メールアドレスを忘れた利用者はどうするのですか?
A: 【問題文】にあるとおり “その場合はコールセンタで対応する” 運用で補完します。
A: 【問題文】にあるとおり “その場合はコールセンタで対応する” 運用で補完します。
Q: リセットURLに有効期限は必要ですか?
A: はい。トークンの使い回し防止のため短い有効期限とワンタイム利用の実装が推奨されます。
A: はい。トークンの使い回し防止のため短い有効期限とワンタイム利用の実装が推奨されます。
関連キーワード: パスワードリセット、リセットトークン、メール認証、乗っ取り対策、リスク低減
設問4:〔サイトRでのインシデント〕について、(1)〜(3)に答えよ。
問題文を見る(3)本文中の下線①について、更に大きな被害とは何か。具体的な被害を二つ挙げ、それぞれ30字以内で述べよ。
模範解答
①:サイトPでポイントが不正に利用される。
②:サイトQでA百貨店の商品が不正に購入される。
解説
解答の論理構成
- インシデントで明らかになった事実
- 攻撃者はサイトRのパスワード失念機能を悪用し、ある顧客のアカウントを乗っ取った(本文「攻撃者がパスワード失念時の処理を悪用して…当該顧客のアカウントを乗っ取った」)。
- 予定していたアカウント共通利用の仕様
- 「顧客がアカウントの紐付けを設定すれば、子アカウントの代わりに親アカウントを用いて各サイトにログインできる。」
- 設問の下線①の文脈
- L課長は「もしもこれらの問題に気付かずにアカウントの共通利用を提供していたら、①利用者に更に大きな被害が発生するところだった」と発言。
- つまり、乗っ取られたサイトRアカウントが親または子として紐付けられると、攻撃者はサイトP・Qにもログインできる。
- 各サイトで想定される被害
- サイトPの機能には「クレジットカード利用ポイントの残高確認、商品又は他社のポイントとの交換申請」がある。
→ 攻撃者がポイントを不正交換・利用できる。 - サイトQの機能には「A百貨店の商品購入」がある。
→ 攻撃者が商品の不正購入を行える。
- サイトPの機能には「クレジットカード利用ポイントの残高確認、商品又は他社のポイントとの交換申請」がある。
- 以上から、下線①で指す「更に大きな被害」は
① サイトPでポイントを不正に利用される被害
② サイトQで商品を不正に購入される被害
となる。
誤りやすいポイント
- サイトPを「クレジットカード明細閲覧サイト」とだけ捉え、ポイント交換機能の存在を見落とす。
- 「更に大きな被害」を抽象的に答え、具体的なサイト名・被害内容を示さない。
- サイトR自体の被害(キャンペーン応募)を再度挙げてしまい、設問の趣旨とずれる。
FAQ
Q: どうしてサイトRの被害よりサイトP・Qの被害が「更に大きい」のですか?
A: サイトPはポイント、サイトQは商品購入という金銭価値が直接絡む機能を持つため、攻撃者の経済的利益や利用者の損失が大きいからです。
A: サイトPはポイント、サイトQは商品購入という金銭価値が直接絡む機能を持つため、攻撃者の経済的利益や利用者の損失が大きいからです。
Q: 紐付け設定をしていない利用者も被害に遭いますか?
A: いいえ。紐付けを行っていない場合、サイトRの資格情報だけではサイトP・Qにログインできません。
A: いいえ。紐付けを行っていない場合、サイトRの資格情報だけではサイトP・Qにログインできません。
Q: 攻撃者はサイトPで直接クレジットカードを不正利用できますか?
A: サイトPは利用明細閲覧サイトで決済機能はありませんが、ポイント交換で外部サービスにポイントを移すなどの不正が可能です。
A: サイトPは利用明細閲覧サイトで決済機能はありませんが、ポイント交換で外部サービスにポイントを移すなどの不正が可能です。
関連キーワード: SSO, アカウント乗っ取り、認証連携、資格情報再利用、不正ポイント交換
設問5:〔アカウントの共通利用の設計の見直し〕について、(1)〜(3)に答えよ。
問題文を見る模範解答
(い):(2)
(う):(4)
解説
解答の論理構成
-
画面(い)の位置付け
-
画面(う)の位置付け
- 図7の(う)には“ログインしました。ようこそ、サイトQへ”とあり、認証完了後にSP(サイトQ)が保護リソースを返す場面で表示されます。
- 図6では、IdPからの認証応答を受け取った後にSPがリソースを返却する段階を“(4)→───◀ 「認証応答に基づいたSPのリソース」”と示しています。
- したがって、SPがトップメニューを表示する(う)の画面は、図6の「(4)」に相当します。
-
以上より
- (い):図6の(2)
- (う):図6の(4)
誤りやすいポイント
- IdPとSPを混同し、図6の「(3) IdPからSPへの認証応答転送」をログイン完了画面と誤解する。実際の画面表示は(4)のリソース返却時です。
- 図7(い)を「ユーザが認証要求をSPから転送された直後の画面」と考え、(1)と回答するミス。フォーム表示は既にIdP上なので(2)です。
- SAMLの一連の流れを「リダイレクト=(3)」のように単純化し、画面表示のタイミングを見落とす。
FAQ
Q: IdPの画面が表示される時点は必ず図6の(2)と考えて良いですか?
A: はい。図6の“(2)→─── 双方向矢印:「認証のための通信」”は利用者とIdP間の資格情報入力・認証処理全体を指し、IdPのログインフォームはその最初の表示に当たります。
A: はい。図6の“(2)→─── 双方向矢印:「認証のための通信」”は利用者とIdP間の資格情報入力・認証処理全体を指し、IdPのログインフォームはその最初の表示に当たります。
Q: 図6の(3)はブラウザで何か画面が出るのですか?
A: (3)はIdPが発行したSAML署名付きの認証応答をブラウザがSPに転送する通信フェーズであり、通常は画面遷移が自動的に行われるため、利用者可視の画面はほとんどありません。
A: (3)はIdPが発行したSAML署名付きの認証応答をブラウザがSPに転送する通信フェーズであり、通常は画面遷移が自動的に行われるため、利用者可視の画面はほとんどありません。
Q: SPがリソースを返す(4)の後に追加のリダイレクトが起きても、画面(う)は(4)に分類されますか?
A: はい。認証が完了し、SPの通常セッションでページを返している状態なので、図6で定義された(4)の段階に含めて考えます。
A: はい。認証が完了し、SPの通常セッションでページを返している状態なので、図6で定義された(4)の段階に含めて考えます。
関連キーワード: SAML, Web Browser SSO, IdP, SP, 認証フロー
設問5:〔アカウントの共通利用の設計の見直し〕について、(1)〜(3)に答えよ。
問題文を見る(2)利用者の操作によって、図7のとおりに画面が遷移した場合、(あ)(い)(う)の各画面では、どのサーバから送られたHTMLを表示するか。それぞれ、“SP”、“IdP”のいずれかを示せ。
模範解答
(あ):SP
(い):IdP
(う):SP
解説
解答の論理構成
- 【問題文】で、アカウント共通利用は“「SAMLプロトコルのWeb Browser SSO Profile」を用いる。サイトSが、IdP(Identity Provider)となり、サイトP、Q、Rは、SP(Service Provider)となる。”と明示されています。
- 同じく【問題文】には“図6は、Web Browser SSO Profileの基本的な通信の流れである。”とあります。図6の流れを要約すると
(1) 利用者が“SPのリソースへのアクセス要求”→SPは“IdPへの認証要求”をブラウザに転送
(2) ブラウザはIdPへ遷移し認証
(3) IdPは“認証応答”をブラウザ経由でSPへ返却
(4) SPは認証後のリソースを返却
というステップになります。 - 図7の画面と図6のステップを対応づけます。
・(あ) 画面は“サイトQのIDでログイン”というSP独自のログイン画面で、ここで“サイトSのIDでのログインはこちら”リンクを押すとIdP連携に進みます。これは“(1) SPのリソースへのアクセス要求”で返されるHTMLなので送信元はSP。
・(い) 画面はIdP(サイトS)のログイン画面です。図6の“(2) IdPでの認証のための通信”に相当し、送信元はIdP。
・(う) 画面は“ログインしました。ようこそ、サイトQへ”とSPであるサイトQのトップメニューを表示しています。これは図6の“(4) 認証応答に基づいたSPのリソース”に該当するため送信元はSP。 - 従って解答は
(あ):SP
(い):IdP
(う):SP
誤りやすいポイント
- 「リンクをクリックした直後もまだSPの画面」と勘違いし、(い)をSPと答えてしまう。実際にはリンク遷移でIdPにリダイレクトされている。
- 認証成功後の“ようこそ、サイトQへ”を「IdPからのメッセージ」と誤認する。SAMLでは最終的なHTMLはSPが生成する点に注意。
- 図7だけを見て判断し、図6のSAMLフローと結び付けないため送信元を取り違える。
FAQ
Q: SPのログイン画面にIdPへのリンクがあるのはなぜですか?
A: ユーザに「自サイトのIDでログインするか、IdP経由でSSOするか」を選ばせるためです。どちらを選んでも最終的な認証結果はSPが検証します。
A: ユーザに「自サイトのIDでログインするか、IdP経由でSSOするか」を選ばせるためです。どちらを選んでも最終的な認証結果はSPが検証します。
Q: IdPで認証した後、なぜ再度SPに戻る必要があるのですか?
A: IdPは“認証情報を担保するSAMLレスポンス”を発行するだけで、保護リソースの提供主体はSPだからです。レスポンスを受け取ったSPが正当性を検証し、初めてリソースを返却します。
A: IdPは“認証情報を担保するSAMLレスポンス”を発行するだけで、保護リソースの提供主体はSPだからです。レスポンスを受け取ったSPが正当性を検証し、初めてリソースを返却します。
Q: SP‐IdP間の通信は常にブラウザ経由ですか?
A: Web Browser SSO Profileでは基本的にブラウザリダイレクト/POSTでメッセージを中継します。バックチャネル(SOAP等)を使う別プロファイルも存在しますが、本設問はブラウザプロファイルです。
A: Web Browser SSO Profileでは基本的にブラウザリダイレクト/POSTでメッセージを中継します。バックチャネル(SOAP等)を使う別プロファイルも存在しますが、本設問はブラウザプロファイルです。
関連キーワード: SAML, IdP, SP, シングルサインオン、リダイレクト
設問5:〔アカウントの共通利用の設計の見直し〕について、(1)〜(3)に答えよ。
問題文を見る(3)利用者の操作によって、図8の(え)(お)(か)(き)(く)(け)の順に画面が遷移した場合、(え)(か)(き)(く)の各画面では、どのサーバから送られたHTMLを表示するか。それぞれ、“SP”、“IdP”のいずれかを示せ。
模範解答
(え):SP
(か):IdP
(き):IdP
(く):SP
解説
解答の論理構成
-
役割の前提を確認
- 【問題文】には
“サイトSが、IdP(Identity Provider)となり、サイトP、Q、Rは、SP(Service Provider)となる。”
とあり、画面を出す主体はIdPかSPのいずれかだけです。
- 【問題文】には
-
(え) の画面
- 【図8】(え) には
“楕円形ボタン『サイトQのIDでログイン』”
と明示されています。ログイン対象が “サイトQ” であるため、HTMLを返すのは “サイトQ = SP” です。
- 【図8】(え) には
-
(か) の画面
- (え) から “サイトSのIDでのログインはこちら” のリンクをたどると (か) が表示されます。
- (か) にはサイト名の記載がなく、ボタンも単に “ログイン”。これは共通認証基盤であるIdPのログイン画面と読み取れます。したがって送り手は “IdP” です。
-
(き) の画面
- (か) から “アカウントを作成する” をたどると (き) に遷移します。
- (き) は
“『ID』、『パスワード』…『アカウントを作成』”
と、IdP側で新規アカウントを発行する機能そのものです。よって “IdP” がHTMLを返します。
-
(く) の画面
- (き) でIdPに新規アカウントを作成後、SP側に戻り
“『サイトQのアカウント “[ ]” と、サイトSのアカウント “[ ]” を紐付けました。』”
という完了メッセージを表示します。ここで主語になっているのは “サイトQ”、すなわちSPです。
- (き) でIdPに新規アカウントを作成後、SP側に戻り
-
以上より
(え):SP
(か):IdP
(き):IdP
(く):SP
誤りやすいポイント
- 画面デザインが似ているため、(か) をSPと誤認しやすい。リンク遷移先の文言を手掛かりにIdPへのリダイレクトであることを見抜く必要があります。
- “アカウント作成”=IdP機能という鉄則を忘れて (き) をSPと答えてしまう。
- “紐付け完了”メッセージに両方のサイト名が出てくるので混乱し、(く) をIdPとしてしまう。メッセージ作成主体がどちらかを冷静に判断することが大切です。
FAQ
Q: IdPの画面かSPの画面かを素早く見分けるコツはありますか?
A: ログイン対象が単一サイト名ならSP、サイト名が出ず “ログイン” や “アカウント作成” といった共通機能ならIdPと判断するのが有効です。
A: ログイン対象が単一サイト名ならSP、サイト名が出ず “ログイン” や “アカウント作成” といった共通機能ならIdPと判断するのが有効です。
Q: (お) や (け) の画面も問われることはありますか?
A: 設問で指定がなければ不要ですが、遷移全体を理解しておくとSP↔IdPの戻り場所を確実に追跡できます。
A: 設問で指定がなければ不要ですが、遷移全体を理解しておくとSP↔IdPの戻り場所を確実に追跡できます。
Q: SAMLを使う場合でもSP側ログイン画面は残るのですか?
A: 【問題文】のとおり “サイトQには、サイトQのアカウントでも、サイトQのアカウントと紐付けたサイトSのアカウントでもログインできる” ため、従来型のSPログイン画面も併存します。
A: 【問題文】のとおり “サイトQには、サイトQのアカウントでも、サイトQのアカウントと紐付けたサイトSのアカウントでもログインできる” ため、従来型のSPログイン画面も併存します。
関連キーワード: SAML, SSO, Identity Provider, Service Provider, 認証連携











