* 設問3 予約管理機能の不具合について(1)~(4)に答えよ。 (2) 表8を完成させるために、【m】~【r】に入れる適切な字句又は数字を答えよ。 >【m】:5 >【n】:42 >【o】:6 >【p】:55 >【q】:5 >【r】:60 * 解説 設問2につづいて、レースコンディションの穴埋め問題です。 本文抜粋 > 更に、&u(){①空き状態であった予約枠を、顧客αが画面2で選択して画面3に進むのと並行して、同一の予約枠を顧客βが画面2で選択した場合、表8に示す順序で各処理が完了すると、顧客βの個人情報が顧客αの画面4に表示されてしまう}ことが確認できた。 ちょうど下線①の部分がポイントです。設問2はレースコンディションの結果先に仮予約した人の情報が、後から仮予約した人の情報で上書きされてしまいましたが。今回は、「後から更新した人の情報が、先に更新した人の画面に表示される」という現象です。 問題のソース ** 図6 サーブレット"KakuteiClick" #divclass(blackdiv){{ (管理人省略) 48: (4) (4) // 予約状況が仮であり、自分の予約であることを確認する 49: (4) (4) if (rsvStatus == RSV_KARI && rsvUserID.equals(loginUserID)) { 50: (4) (4) (4) // 予約状況を予約確定に変更する 51: (4) (4) (4) psUp.setInt(1, RSV_KARI); psUp.setString(2, loginUserID); 52: (4) (4) (4) psUp.setString(3, toShop); psUp.setString(4, serviceMenu); 53: (4) (4) (4) psUp.setLong(5, nowDateTime); psUp.setString(6, rsvDate); 54: (4) (4) (4) psUp.setString(7, rsvTime); psUp.setString(8, rsvBiyoshi); 55: (4) (4) (4) psUp.executeUpdate();&bold(){&color(red){ ← [ポイント1.予約確定に更新]}} 56: (4) (4) (4) psSel.setString(1, rsvDate); psSel.setString(2, rsvTime); 57: (4) (4) (4) psSetl.setString(3, rsvBiyoshi); 58: (4) (4) (4) rs = psSel.executeQuery();&bold(){&color(red){ ← [ポイント2.更新:結果を読み込んで画面に表示]}} 59: (4) (4) (4) (省略)[rs内のデータを基にして図4の画面4(予約確定)のHTML出力を行う] 60: (4) (4) } else { (管理人省略) }} αのトランザクションが&bold(){&color(red){[ポイント1.予約確定に更新]}}で更新してから、&bold(){&color(red){[ポイント2.更新:結果を読み込んで画面に表示]}}でデータを読み込んで画面に表示している…この間にβのトランザクションが更新したら、「αの画面にβの情報が表示される」という現象が発生します。 |順序|対象の顧客|処理|備考| |1|α|図6の55行目|&bold(){&color(red){[ポイント1.予約確定に更新]}}| |3|β|図6の?行目|| |2|α|図6の58行目|&bold(){&color(red){[ポイント2.更新:結果を読み込んで画面に表示]}}| ** 表8 個人情報の漏えいにつながる処理の順序 |順序|対象の顧客|処理|備考| |1|α|図5の60行目|| |2|α|図6の42行目|順序1の処理が完了し、10分以上経過してから実行される。| |3|β|図【m】の【n】行目|| |4|α|図【o】の【p】行目|| |5|β|図【q】の【r】行目|| |6|α|図6の58行目|| [[設問に戻る>資格試験/情報処理技術者試験/情報セキュリティスペシャリスト/過去問2013年春午後2/問1#設問]]