簡體   English   中英

PHP Session id cookie 欺騙

[英]PHP Session id cookie spoofing

我想知道是否可以防止會話 ID cookie 格式錯誤。 假設我有一個帶有密鑰SESS和值md73i54kj98ti0uf8dftps2fa3的 cookie,這是一個有效的會話 ID,相應的文件sess_md73i54kj98ti0uf8dftps2fa3存在於我的會話存儲文件夾中。 如果我將密鑰 SESS cookie 的值修改為例如foo ,它將在會話文件夾中創建名為sess_foo 的新文件。 如何檢查提供的 cookie sess id 值是否無效,以便我可以調用session_regenerate_id來設置有效的 id 並創建適當的文件。

另外,我想知道是否有人假設將 cookie sess id 重命名為另一個用戶的真實會話,他會得到控制嗎? 有辦法解決這個問題嗎?

謝謝你。

更新 1:第一個問題可以用session.use-strict-mode ini 指令解決。 http://php.net/manual/en/session.configuration.php#ini.session.use-strict-mode雖然在使用自定義會話處理程序時需要一些額外的步驟。 (我的情況)。 但是如果更改的會話 ID 與其他用戶的真實會話 ID 匹配怎么辦? 我應該使用某種指紋(用戶代理 + ip)還是使用(用戶代理 + ip)的組合密鑰加密會話數據?

對於正在創建的新會話文件,您已經有了session.use-strict-mode解決方案。

但是猜測另一個會話 ID 呢? 您完全正確,如果您能猜出另一個有效 ID,您將使用該會話,有效地冒充其所有者。 登錄后,session id 是用戶使用的唯一秘密,相當於session的 userid+password。

為什么這不是問題呢? 因為您無法合理地猜測另一個有效的會話 ID。 會話 id 是(應該)加密隨機的,而且時間長到你不能猜測一個(更准確地說,它們有很多熵)。 標准解決方案,如 PHP 和大多數其他編程語言或框架中的解決方案,提供了合理的安全級別,但您不應實現自己的會話管理(ID 生成、驗證等),除非您真的知道自己在做什么並且了解安全方面。

在您的示例中,會話 ID 似乎由 26 個小寫字母和數字組成。 有 26 個不同的字母和 10 個數字,因此可能的會話 ID 的數量是 (26+10)^26 = 2.9 * 10^40。 假設您每秒可以嘗試 10 億 (10^9) 個 id,並且您的服務器一次有 100 萬個會話(這在任何方面都不現實)。 正確猜測有效的會話 ID 仍然需要大約 10^25 秒(~3*10^17 年)。 請注意,這遠遠超過了宇宙的年齡。 :)

當然,由於上述原因(會話 ID = 會話的用戶名+密碼),您必須盡可能多地保護會話 ID,例如僅將其存儲在 httpOnly cookie 中,並且永遠不要在 URL 中發送它,或明文(但始終使用 https、cookie 的安全標志和發送的 HSTS 標頭等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM