session_regenerate_id是防止會話劫持的好方法,因爲劫持通常發生在會話ID被盜後的後續步驟中。
例如:
- 訪問一個論壇,XSS注入
- 一個鏈路上的點擊和
- 用戶意識到這是他想要的不是這個搶斷會議,按回
- 站點再生一個新的會話ID,用戶被保存,會話固定不會發生,因爲會話ID被盜可能不會被服務器立即使用。
如果由於某種原因,固定成爲現場且非常快速的事情,例如自動化過程,那麼不,您是對的,這不會節省用戶。這就是爲什麼你不應該只依賴session_regenerate_id而是依賴於用戶的IP地址。
if(!session_id()){
session_start();
if(!isset($_SESSION['user_ip'])){
$_SESSION['user_ip'] = $_SERVER['REMOTE_ADDR'];
}
if($_SESSION['user_ip'] !== $_SERVER['REMOTE_ADDR']){
exit('highjacking detected, session terminated');
}
session_regenerate_id();
}
顯然,如果黑客來自同一個網絡,如工作場所,在IP檢測將不工作,所以你也可以使用一個用戶代理檢查。但是這取決於數據的敏感性,有點矯枉過正。
希望它可以幫助...
它減少了黑客可以在第一時間劫持會話,如果在每次請求 – 2012-01-05 16:06:29
會話ID的變化我也看到了改變每個請求的會話ID的可能性會太過分了,不值得,這是讓我感到困惑的另一件事。與增強安全性相比,重新生成身份證真的成本更高嗎? – ACobbs 2012-01-05 16:11:54