2010-06-12 133 views
0

我有點困惑。我一直在用我自己的會話系統構建我的網站,但我不確定PHP自己的會話系統有多安全。我的會話系統通常只有用戶名和相當苛刻的散列,它不包含用於生成的用戶名或密碼。我將散列保存在用戶數據庫中,並作爲cookie來確認每次頁面加載時的用戶會話。所以我的問題是我可以相信PHP會話還是繼續使用我自己的?PHP用戶會話

+0

爲了澄清,您是使用'$ _SESSION'來存儲數據,還是使用您自己的Cookie? – TheDeadMedic 2010-06-12 18:25:56

+0

我自己的餅乾。 – TMKCodes 2010-06-12 18:30:45

+0

所以你問的是你的認證系統。 – Gumbo 2010-06-12 18:41:32

回答

1

PHP將一個唯一的會話ID保存在一個cookie中,並將所有與會話相關的值存儲在服務器自己的文本文件中。您必須獲取會話ID才能竊取會話,這意味着您必須從受害者的計算機上竊取會話Cookie。 PHP自己的系統至少和你自己建立的系統一樣安全

不同之處可能在於通過暴力來找到活動會話有多困難。這完全取決於哈希算法和隨機數生成器。

你可以使用不同的散列算法,或者你可以使用你的own algorithm to create the session ids用於PHP的會話系統,如果你不相信PHP做到這一點。

+0

謝謝。所以,我使用哪一個並不重要。差異似乎是我將它存儲在一個文件中的MySQL和PHP。 – TMKCodes 2010-06-12 19:13:36

+1

「你必須獲得會話ID來竊取會話」 - 錯誤的,請閱讀會話固定 – symcbean 2010-06-12 23:25:33

0

將數據存儲在cookie中與使用PHP的會話相比是非常不同的。 Cookies在客戶端存儲數據;會話存儲數據的服務器端,它具有許多優點:

  • 用戶無法看到它
  • 用戶不能修改
  • 的瀏覽器並不需要發送的數據向服務器發送每個請求

通常PHP會話確實將會話密鑰存儲爲cookie(儘管他們不需要),但您實際關心的數據都不會發送給用戶,而是存儲在服務器上並使用會話密鑰查找

+0

現在我想知道如果會話密鑰沒有存儲爲cookie,服務器如何注意到用戶是誰? 與我的系統基本上,如果用戶將修改會話cookie,他會剛剛註銷。用戶實際上無法知道我是如何生成會話密鑰的,因此如果他看到它並不重要。我的系統還將會話密鑰存儲在服務器中以確認cookie。 – TMKCodes 2010-06-12 18:47:34

+0

@Temek好吧,客戶必須以某種方式告訴服務器會話密鑰,它不需要存儲在cookie中;另一個主要方式是作爲[GET參數](http://us2.php.net/manual/en/session.idpassing.php) – 2010-06-12 18:58:37

+0

啊耶。愚蠢的我。我以爲你在說客戶端根本不需要有會話數據。 :)抱歉混淆。 – TMKCodes 2010-06-12 19:03:22

0

我不知道如何確保PHP自己的會議系統是

和世界其他地區是不知道你的安全性如何。很多人已經看過PHP中的會話處理器,並沒有發現任何實施中的缺陷。它也很好地表徵和集成,但支持用戶定義的處理程序的概念。

我建議使用標準會話代碼 - 但您可能想編寫自己的處理函數。

C.