當用戶登錄到站點時,我需要以某種方式存儲登錄的用戶ID,以便我的站點可以爲不同的用戶生成不同的內容。PHP:存儲登錄用戶
將用戶ID保存在$_SESSION[]
變量中安全嗎?
用戶是否可以更改$_SESSION[]
數據並僞裝成另一個用戶?
我使用id來檢查我應該從數據庫中獲取哪些數據並查看用戶擁有哪些權限。
當用戶登錄到站點時,我需要以某種方式存儲登錄的用戶ID,以便我的站點可以爲不同的用戶生成不同的內容。PHP:存儲登錄用戶
將用戶ID保存在$_SESSION[]
變量中安全嗎?
用戶是否可以更改$_SESSION[]
數據並僞裝成另一個用戶?
我使用id來檢查我應該從數據庫中獲取哪些數據並查看用戶擁有哪些權限。
最好的和被接受的做法是將用戶ID保存在會話中。
該會話默認作爲文件存儲在/tmp
中。除非您有安全問題,例如directory traversal漏洞,否則最終用戶無法查看。大多數應用程序按照原樣使用$_SESSION
。如果那裏存在大範圍的弱點,那麼重大項目會以不同的方式做事。您不必擔心通過客戶端漏洞獲取服務器端會話值。還要記住使用會話的簡單性。它使數據訪問您需要不斷訪問的,用戶特定的數據,在整個應用程序中保持標準和一致。
所以一個簡單的方法來保存我想保存的數據是安全的,看起來很棒! :) –
+1。 「$ _SESSION」系統的重點在於存儲這種數據。這是所有人都這樣做的方式,這是你應該做的。有一些注意事項需要注意(例如,如果託管公司對其安全性不在意,'/ tmp'可以被共享主機上的其他站點所有者訪問),但是通常'$ _SESSION'是安全可靠的作爲你可以想到的其他任何東西。如果你真的擔心它,可以使用像Suhosin這樣的擴展,在後臺加密會話數據(許多託管公司默認使用Suhosin)。 – SDC
只有當其他用戶能夠獲取其他用戶的會話ID時纔有可能。因此,如果您打算將會話ID存儲在數據庫中,則應對其進行散列或加密。 – Kermit
我會散列它,所以如果有人得到的信息,他們不能僞裝成另一個用戶(他們可以得到一個保存在SESSION,但很難將其更改爲另一個) – Skatox
用戶不可能更改會話數據,它用戶可以劫持會話ID並假裝成與該會話相關聯的用戶 – Crisp