2010-12-09 44 views
1

在閱讀PHP會話安全性的好文章後,我有兩個問題來自討論。 1)$ _ SERVER ['HTTP_USER_AGENT'] - 這樣可以獲得關於用戶瀏覽器和其他細節的信息,並且由於用戶可以從另一臺計算機訪問他們的帳戶,那麼它有用嗎?

2)session_regenerate_id - 這將重新生成會話ID,我應該如何使用它? session_id在會話超時或關閉後是否被刪除?

感謝您的所有幫助。我感謝每一個觀點和迴應。

+0

HTTP_USER_AGENT對於會話/安全性來說並不是真正有用的。 – Jonah 2010-12-09 20:07:29

+0

感謝您的評論。我明白了。 – 2010-12-09 20:47:16

回答

4

$ _SERVER ['HTTP_USER_AGENT'],當您使用可能不適用於所有人的特殊功能,或者想要了解其目標受衆時,可以使用此信息。當使用get_browser()函數查找有關瀏覽器功能的更多信息時,這也很重要。通過獲取這些信息,用戶可以被引導到最適合他們瀏覽器的網站版本。

session_regenerate_id,當它重命名會話ID時,它不會刪除舊會話,使其保持活動狀態,並且可能會被黑客使用。如果僅在新會話創建過程中使用該函數作爲防止會話固定的手段,這不會造成問題,這是預期用途btw。但是,如果在基於每個基於會話的請求上使用它以防止會話泄漏(通過HTTP_REFERER和類似請求),那麼它將完全無用,因爲之前的會話標識仍然可用。這也意味着改變「行動」的id作爲一些腳本來防止會話盜竊也是毫無意義的;實際上,它使同一用戶的會話id數量增加了一倍,使得它更容易承擔他們的身份。此外,這意味着在每次調用函數時,會話條目的數量都會重複,這些條目會一直存在,直到它們被垃圾收集過程視爲已過期並被刪除。

3

用戶代理對確定正在使用的瀏覽器很有用,這可能導致猜測其某些功能。例如,大多數移動設備都可以通過其瀏覽器的用戶代理準確識別(請參閱WURFL),從而允許網站的開發人員將移動設備指向網站的移動版本。

但是,它可以由用戶修改,所以它的價值應該與任何用戶輸入的情況一樣。

session_regenerate_id()不會刪除會話。它只是將其ID改爲新創建的一個。爲避免系統自動刪除舊會話文件,可以通過將optional function parameter設置爲true將其自行刪除。其用途是避免session fixation attacks,攻擊者可以通過知道並向服務器呈現其id來訪問現有會話的數據。

+0

Thanks.Your answer is enlightening。 – 2010-12-09 20:49:06

3

1)會話不綁定到帳戶,它們綁定到瀏覽器會話。您可以使用用戶代理信息來查看其他用戶代理是否試圖劫持會話。然而,這不是防錯的。您還可以使用用戶的IP地址(或其給定範圍)來抓取劫持企圖。

2)通過不時撥打session_regenerate_id,您可以減少某人劫持會話的可能性。如果會話ID在URL中傳遞,則尤其如此。例如,假設某人不小心將鏈接粘貼到URL中與SID聊天。如果您定期重新生成會話ID,那麼看到該鏈接的用戶不能劫持會話,因爲ID已經更改。

1

我會嘗試從下往上回答你的問題:session_regenerate_id()在防止會話修復攻擊方面很有用,其中獲得會話ID的惡意用戶劫持你的會話,然後可以像你一樣行事。當您重新生成會話時,您可以跟蹤數據庫或類似的最新會話ID,並且只允許使用最新的會話ID進行訪問(順便說一句,如果您足夠頻繁地重新生成sessid,這將阻止用戶使用多個瀏覽器瀏覽器/窗口),否則舊會話將默認可用(除非將true布爾參數傳遞給session_regenerate_id函數調用)。

一些安全瘋狂的人會建議在每次請求後重新生成會話ID,但是您也可以跟蹤一個會話變量,每個請求遞增一次,並且每重發X次請求(5次或10次或任何您確定的是足夠的金額用於您的安全級別)。另一個選項是在特權升級期間(例如登錄)重新生成會話ID。

對於HTTP_USER_AGENT,它主要用於實現瀏覽器/客戶端特定功能(例如,顯示「Get Chrome!」)。用戶使用Firefox或IE訪問您的網站時鏈接)。

相關問題