簡體   English   中英

PHP的檢查會議足夠安全?

[英]php checking session secure enough?

我有兩個關於php會話和cookie的基本問題

1)服務器如何知道會話何時終止? 或何時刪除session_id和info等(即,如果未調用session_destroy的話)

2)是否在客戶端存儲了一個cookie,其中包含服務器用來標識個人的唯一會話ID,如果有人要訪問該會話ID,他們可以訪問所有相同的信息嗎? 除了簡單地檢查會話信息之外,還有其他必要的安全級別來標識用戶嗎?

服務器如何知道會話何時終止?

會話基本上是一堆存儲在服務器上的數據。 客戶端通過會話ID識別並匹配到特定會話,該會話ID存儲在會話中以及客戶端的cookie中,其默認名稱為PHPSESSID (您可以在瀏覽器中找到其值,也可以在PHP中使用session_id()函數找到它的值。)如果瀏覽器刪除此cookie,則會話ID在客戶端丟失,並且客戶端無法取回存儲在其中的其他數據。服務器上的會話。 該數據最終將被垃圾收集器刪除。

每次調用session_start()時,垃圾回收器都會以一定的概率被調用。 概率等於gc_probability / gc_divisor 如果會話持續時間超過gc_maxlifetime秒,則垃圾收集器將刪除會話數據。 您可以在phpinfo()輸出中或使用ini_get('session.gc_maxlifetime')檢查所有這些值。 那是關於服務器上的會話數據。 現在關於客戶。

會話配置包含一個值session.cookie_lifetime 引用PHP手冊

session.cookie_lifetime指定發送到瀏覽器的cookie的生存時間(以秒為單位)。 值0表示“直到瀏覽器關閉”。 預設為0。

PHP會話和安全性

0有特殊含義。 它告訴瀏覽器不要將cookie存儲到永久存儲中。 因此,當瀏覽器終止時,會話ID cookie將立即刪除。 如果開發人員設置的值不是0,則可能允許其他用戶使用會話ID。 大多數應用程序應為此使用“ 0”。 如果需要自動登錄功能,請實施自己的安全自動登錄功能。 不要為此使用會話ID。

您可以使用以下任何一種方法來檢查設置:

  1. phpinfo() ,在session部分中查找session.cookie_lifetime
  2. session_get_cookie_params()['lifetime']
  3. ini_get('session.cookie_lifetime')

因此,基本上,如果會話cookie生存期為0,則瀏覽器在關閉時將其刪除,並且客戶端將無法訪問會話數據。

如果有人要訪問該會話ID,他們可以訪問所有相同的信息嗎?

是。 只要(任何)客戶端知道該ID並且在服務器上不刪除會話數據,客戶端就可以訪問它。

除了簡單地檢查會話信息之外,還有其他必要的安全級別來標識用戶嗎?

這取決於您的應用程序。 獲取會話ID並非易事,需要攔截通信或直接訪問客戶端數據。 使用基於TLS的加密連接可以防止攔截。 獲取客戶端數據需要一些惡意軟件。

本文介紹了一種用於用戶身份驗證的更安全的cookie實現。 簡而言之,盡管它仍然不能阻止cookie劫持 ,但它為您提供了一種檢測它,通知用戶並防止再次使用被盜cookie的方法。

另一篇文章列表更完整地概述了用戶身份驗證的良好做法。 與往常一樣,安全性要求整個項目以安全的方式實施,而不僅僅是其中一個看似關鍵的部分。 但是,如果我的建議是,請不要過度使用。 對於每個項目的特定要求,工作應該是合理的。

暫無
暫無

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

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