2011-05-12 29 views
1

我在php手冊中閱讀了關於會話漏洞的文章。我瞭解到我需要將會話綁定到用戶SSL證書,並在每個頁面上驗證。我不太清楚這意味着什麼。如何將php會話綁定到用戶SSL證書

我的網站在每個頁面上都有SSL,沒有任何交換機,用戶可以在不使用https的情況下訪問它。

我需要在我的代碼中採取措施來保護我的會話嗎?

+0

我認爲你寧願打算將PHP會話綁定到SSL會話ID。或者你的意思是客戶證書? – Gumbo 2011-05-12 08:30:09

回答

0

即使您不切換到非安全頁面,我也會建議將會話cookie僅限制爲HTTPS頁面。這可以在使用session_set_cookie_params()調用session_start()函數之前完成,將參數$secure設置爲true。我沒有聽說需要驗證cookie,cookie應該被加密傳輸。

session_set_cookie_params(0, '/', '', true, true); 
session_start(); 

爲了防止會話固定,你應該只用一個cookie傳輸會話ID,而不是在URL中。請參閱session.use_only_cookies設置。爲了在安全的網站,你可以登錄後重新生成會話ID:

的login.php:

session_set_cookie_params(0, '/', '', true, true); 
session_start(); 
session_regenerate_id(true); 

這產生了不同的會話ID一個新的cookie,但是保持會話的內容。

0

如果您正在談論客戶端證書身份驗證(客戶端通過該身份驗證提供證書以向服務器進行身份驗證),那麼您可能使用服務器的身份驗證層爲您提供了一個ID。假設Apache Httpd,例如可以用SSLOptions +FakeBasicAuth完成。從PHP的角度來看,在此之後使用HTTP基本身份驗證並沒有太大的區別(並且您可以將PHP會話綁定到這種形式的身份驗證)。

如果您不是在談論客戶端證書,而是在SSL/TLS會話ID中,SSL/TLS會話的概念與PHP會話完全不同。由於許多原因(包括連接丟失,超時,同時在頁面上同時下載多個項目,...),SSL/TLS會話可能在PHP會話期間合法更改。這種改變的效果對於HTTP層是完全透明的。這兩種會話之間沒有任何關聯,並且使用SSL/TLS會話ID作爲PHP會話ID的基礎更可能產生麻煩。