令和4年午後1問1設問2(2)

akiさん  
(No.1)
解説可能な方いらっしゃればよろしくお願いします。

セッション情報から取得するのはあくまで利用者情報であって、セッション情報にはプロジェクトIDが含まれていないと理解していました。そのため私の解答は「利用者情報に紐づくプロジェクトIDは書き換えられないから」としていました。データベースに着目した感じです。
模範解答の「セッション情報からプロジェクトIDを取得するから」とあり、違和感を覚えましたプロジェクトIDはデータベースから取得しているとおもうのですがいかがでしょうか。その理解が正しい場合はIPAの模範解答をどう理解したらよいのでしょうか。WEBサーバ構築等にかかわった経験がなく、的外れな質問をしてしまっているかもしれません。

なお、セッション情報は書き換えられないというニュアンスを解答に盛り込みたかったのですが、文字数の関係から含めることはできませんでした。
2023.03.10 08:29
pixさん 
SC ダイヤモンドマイスター
(No.2)
質問は令和4年「春」午後1問1設問2(2)でしょうか?
処理は以下のような流れが想定されます。
説明が長文なのはご容赦ください。

■方法1(脆弱性あり)
1.P3-表2-項番1 Sシステムにログインする
  ログイン時にセッションが生成される。
  この時、セッション情報に利用者IDとプロジェクトIDをセットする
  ・利用者ID:ログイン時に入力された値
  ・プロジェクトID:利用者テーブルから利用者IDをキーにして取得する
    (P4 方法1:「ログイン時にその利用者IDに対して登録されている
      プロジェクトIDを取得し、」と記載あり)
  ※セッション情報はセッションの状態を保持するための
    読み書き可能な構造体(ハッシュテーブル)です。
2.P3-表2-項番2 情報選択機能画面に遷移
  遷移する時にセッション情報に取得済みのプロジェクトIDを利用し、
  GETリクエストのクエリ文字列でプロジェクトIDを指定する。

方法1はログイン済の利用者が偽のGETリクエストを用いて、すべての
プロジェクト情報を参照することができてしまいます。
原因はGETリクエスト中にプロジェクトIDを指定している点です。
これはログインと同時にプロジェクトIDを取得し、画面遷移時に引き渡して
いるロジックが問題です。

方法2はこの点を改善するために、プロジェクトIDの取得を情報選択機能
画面に遷移した後に行うように改良しています。

■方法2(脆弱性なし)
1.P3-表2-項番1 Sシステムにログインする
  ログイン時にセッションが生成される。
  この時、セッション情報に利用者IDのみをセットする
  ・利用者ID:ログイン時に入力された値
  ※セッション情報はセッションの状態を保持するための
    読み書き可能な構造体(ハッシュテーブル)です。
2.P3-表2-項番2 情報選択機能画面に遷移
  P5-図2-行6
  int projectId = (省略) // 利用者の参加プロジェクトのプロジェクトIDを
                            利用者テーブルから取得し、代入する処理
ここで、セッション情報に格納された利用者IDからプロジェクトIDを
取得する。

>なお、セッション情報は書き換えられないというニュアンスを解答に
>盛り込みたかったのですが、文字数の関係から含めることはできませんでした。
セッションに関しての認識に齟齬があるようです。
セッションなどのWebシステムについては
定本の「図解入門 よくわかる最新情報セキュリティの基本と仕組み」などを
参照してください。
2023.03.10 12:07
akiさん  
(No.3)
諸々読み落としや知識不足があったようです。
ありがとうございます。勉強しなおします。
2023.03.10 12:58
橙色文書さん 
(No.4)
IPAの解答例には「セッション情報からプロジェクトIDを取得するから」の他に「プロジェクトを示すパラメタを外部から指定できないから」という例もあります。
どちらもサーバサイドの処理についての説明しています。

解答になかったakiさんの認識を解答に記述すると、後者のIPA解答例の裏返しで「プロジェクトを示すパラメタはデータベースから取得するから」等になるかと思います。
「利用者情報に紐づくプロジェクトIDは書き換えられないから」は上記を前提としていますから、省略すると大きく減点されると思います。
2023.03.10 20:47

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop