2012-01-05 60 views
1

我有麻煩理解這一點,我認爲我對網絡漏洞的無知是責備。我對會話固定的理解如下:會不會regenerate_session_id重新生成攔截會話ID的人的ID?

  • 黑客利用一些利用漏洞檢索當前登錄用戶的會話ID。
  • 黑客使用會話ID來訪問網站,竊取了會議,並在有效記錄。

它已經建議使用regenerate_session_id減少的機會黑客可以攔截會話。現在不會觸發regenerate_session_id,用會話ID更新黑客,同時註銷最初登錄的用戶?這看起來好像會造成更多的傷害,所以我知道我必須在圖片中丟失一些東西。我錯過了什麼?

+0

它減少了黑客可以在第一時間劫持會話,如果在每次請求 – 2012-01-05 16:06:29

+0

會話ID的變化我也看到了改變每個請求的會話ID的可能性會太過分了,不值得,這是讓我感到困惑的另一件事。與增強安全性相比,重新生成身份證真的成本更高嗎? – ACobbs 2012-01-05 16:11:54

回答

0

session_regenerate_id是防止會話劫持的好方法,因爲劫持通常發生在會話ID被盜後的後續步驟中。

例如:

  1. 訪問一個論壇,XSS注入
  2. 一個鏈路上的點擊和
  3. 用戶意識到這是他想要的不是這個搶斷會議,按回
  4. 站點再生一個新的會話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檢測將不工作,所以你也可以使用一個用戶代理檢查。但是這取決於數據的敏感性,有點矯枉過正。

希望它可以幫助...

+0

應該使用設置爲true的第一個參數調用session_regenerate_id()。否則攻擊者仍然可以使用舊的會話ID,因爲默認情況下這不會被刪除。 – 2012-01-05 16:31:25

+0

@AununLarsen謝謝你不知道:S – 2012-01-05 16:40:10