2011-02-25 18 views
27

這是跨越我的想法,我想知道是否有可能將信息存儲在PHP的$ _SESSION變量中有多安全?

回答

38

將變量存儲在$ _SESSION變量中有兩個潛在的「不安全性」。

  • 第一個如其他答案所述稱爲「會話固定」。這裏的想法是,由於會話ID存儲在cookie中,所以ID可以更改爲另一個用戶的ID。如果用戶在每個會話中獲得一個新的ID,這不是問題,因此很難找到當前工作會話的ID並劫持它。
  • 第二個完全取決於你的代碼。如果你的代碼泄漏你存儲在$ _SESSION中的祕密信息的值,那麼它是不安全的。如果你的代碼允許用戶控制這些信息的值,那麼它是不安全的。否則,如果$ _SESSION變量中有某些內容,並且您的代碼永遠不允許用戶看到它或寫入它,那麼它是安全的。
+0

+1因爲這是迄今爲止唯一的答案,它解決了不安全編碼所允許的漏洞。 – 2011-02-25 20:06:30

+0

你是什麼意思「如果你的代碼泄漏的價值」 – 2011-02-25 20:18:11

+4

泄漏會像'你好,$ _SESSION ['用戶名'],你的密碼是$ _SESSION ['密碼']''。會話數據保存在服務器上,除非您明確輸出代碼的任何部分,否則永遠不會被遠程用戶查看。 – 2011-02-25 20:29:09

2

$_SESSION完全存儲在服務器上,所以用戶不能修改它。但是,當用戶連接到其他用戶的會話時,會話劫持攻擊可能會發生。

1

會話數據存儲在服務器上。

0

安全性較差的$_COOKIES位於客戶端計算機上,$_SESSION存儲在服務器上。它的位置取決於php.ini的session.save_path。但仍然存在安全問題,如session fixation

10

PHP會話的工作是在最終用戶的計算機上存儲一個PHPSESSID cookie,該cookie用作基於服務器的會話信息的訪問密鑰。該cookie值是一個哈希字符串(安全性取決於您的PHP設置),用於將特定瀏覽器鏈接到您設置的特定會話值。

該字符串看起來像b420803490a9f0fe8d6a80657fec3160。所以,最終用戶可以改變這個字符串,但是他們的會話將變得無效,因爲它幾乎肯定不會與PHP存儲的會話匹配,並且他們將無法訪問數據。

正如其他人所說的,某人的某個PHPSESSID有被暴露的危險,並且有人用它來劫持別人的會話。

相關問題