他人のセッションIDを使用されたときの対策


セキュリティの件で質問なんですがCakePHP3.9で作ったwebサービスで脆弱性診断を受けてログインユーザーAのセッションIDを使ってログインユーザーBがログインユーザーAの権限で操作できてしまうという報告がありました。  
他人のセッションIDを使えばその人になりすまして操作できるのは当たり前だと思うのですが、他人のセッションIDを使われても正しい権限の検証ができるようにするにはどうすればいいのでしょうか？  
ログイン管理やアクセス管理はCakePHPのコンポーネントに任せています。




おそらく「（セッション ID
を盗める脆弱性があって）ログインユーザーBがログインユーザーAの権限で操作できてしまうという報告」のような報告だったのではないかと想定した回答です。

他人のセッションIDが使われると大変なので、セッションIDが盗まれにくくしたり、仮に盗まれても影響範囲が小さくなるようにする必要があります。たとえばIPAが出している[「安全なウェブサイトの作り方」](https://www.ipa.go.jp/security/vuln/websecurity/session-
management.html)には大まかに以下のことが書かれています（2023年時点）。

  * セッションIDを推測が困難なものにする。
  * セッションIDをURLパラメータに格納しない。
  * HTTPS通信で利用するCookieにはsecure属性を加える。
  * ログイン成功後に、新しくセッションを開始する。
  * ログイン成功後に、既存のセッションIDとは別に秘密情報を発行し、ページの遷移ごとにその値を確認する。
  * セッションIDを固定値にしない。
  * セッションIDをCookieにセットする場合、有効期限の設定に注意する。

詳しくはIPAのサイトをご覧ください。

質問者さんが具体的にどのような対応を取るべきなのかは、指摘された脆弱性の種類によります。どのようにセッションIDが盗まれてしまうのかという部分を理解して、修正することになるでしょう。CakePHPであれば
<https://book.cakephp.org/3/ja/development/sessions.html>
のあたりに一般的な話題についてのドキュメントがあるので、IPAの資料と共に参照してみてください。

