質問: **質問1.session fingerprint とはどんな概念なのでしょうか?** ・「セッションID」を不正取得された場合のセキュリティ対策? ・セッションIDとユーザエージェントを結びつければ良い? --- **質問2.参考コードが、session_regenerate_id 実行間隔を15分と設定しているのですが、どういう理由が考えられるでしょうか?** ・間隔を空けるのは、ページアクセスを頻繁に行うとセッションが切れるかもしれないのでそれを防ぐため? ・仮に上記理由だとしても1分ぐらいの実行間隔で良い気もするのですが...
回答: 【回答1】 * セッションIDとIPアドレスを結びつけると,セッションIDが盗まれたとしてもセッションハイジャックが非常に困難になり,セキュリティが向上する.**但し,これはなりすましを防ぐだけであって,盗聴を防げるわけではない.**また,IPアドレス全部分を照合することはユーザに不便を強いるので,ユースケースに合わせてネットワーク部の照合だけでも十分かどうかをまず検討すべき. * UserAgentの照合は,無いよりはあるほうがマシというぐらい. (UserAgentはIPアドレスと異なり偽装が容易にでき,Webブラウザとして利用されているUserAgentの数は限られているため) 個人的には...盗聴となりすましを両方防ぐためにTLS暗号化を行っているのであれば,この時点で(XSSなどの脆弱性が無ければ)セッションIDを盗み出すこと自体がまず困難なので,必須というわけでもないかと思いました. 【回答2】 > > ・間隔を空けるのは、ページアクセスを頻繁に行うとセッションが切れるかもしれないのでそれを防ぐため? > > > そういう都合もありますし,サーバに対する負荷の考慮もあります. > > ・仮に上記理由だとしても1分ぐらいの実行間隔で良い気もするのですが... > > > 大規模サイトだと負荷がつらいかもしれません.規模次第といったところでしょう. またこちらの対応も,TLS暗号化しているのであれば必須ではないというところです.以下に該当する場合は定期的にリフレッシュしたほうがいいとは思いますが. * PHPSESSIDの有効期限が極端に長い * PHPSESSIDの有効期限を再アクセスで延長している