2011-04-20 113 views
15

我想知道在會話中存儲用戶ID的風險是什麼?php在會話中存儲用戶ID?

然後簡單地做,我們不會擔心散列他們

if(isset($_SESSION['user_id'])){ 
    login_user($_SESSION['user_id]); 
} 

在會話加密就夠了嗎? 某人能夠更改其ID的機會有多大?

+0

值得注意的是,如果用戶有適當的插件(我使用Web Developer for Firefox),用戶可以看到他們自己的會話信息。你也錯過了第二個'在你的login_user電話 – DaOgre 2011-04-20 00:57:07

+5

@DaOgre *會議*信息!== *餅乾*信息 – deceze 2011-04-20 01:24:06

+0

非常好的點@deceze。我很快查看並看到會話ID被存儲,並做出一些快速(和錯誤)的心理跳躍。感謝您的支持 – DaOgre 2011-04-20 08:20:38

回答

10

該會話默認作爲文件存儲在/tmp中。除非您有安全問題,例如directory traversal漏洞,否則最終用戶無法查看它。

客戶端看到的唯一部分是存儲在映射到服務器上相關會話的cookie中的唯一哈希。

0

如果有人能夠訪問您的會話,他可能可以訪問更多。我不會散列它,並且確保它不會到達客戶端

2

大多數應用程序按照原樣使用$_SESSION。如果那裏存在大範圍的弱點,那麼重大項目會以不同的方式做事。

1

在$ _SESSION中存儲用戶ID是一種相當常見的做法。

您的替代方案可能是使用某種形式的session_id()作爲關鍵字將會話信息(包括當前用戶標識)存儲在表中。

會話信息以純文本形式存儲。

取決於您的設置,會話位置應該在正確設置的服務器上安全。可以使用session_save_path()來改變位置,這將克服潛在的位置問題。

-2

我建議不要只在會話中添加用戶標識。例如:

1:在一個瀏覽器中創建一個帳戶並登錄。然後將該瀏覽器打開並轉至另一臺計算機。

2:登錄到同一個帳戶並刪除它。現在用一個不同的密碼創建一個新帳戶(如果用戶名是用戶名,則使用相同的用戶名)。

3:回到你的其他電腦做東西。你會發現你很可能現在正在使用另一臺計算機上創建的帳戶。

基本上,因爲會話存儲的id,這可能不一定仍然屬於同一人,這取決於iff帳戶已經改變等。如果沒有密碼是必需的(因爲你已經去了那個過程,當你擁有該帳戶)那麼它類似於打入。

因此,這似乎只有一個工作的機會,如果,當你從數據庫中刪除用戶帳戶,數字ID可以重用(約2%的系統,我見過這樣做)。或者,如果用戶名是用戶名(約20%我見過這樣做)。

因此,我會建議在會話中添加用戶標識和密碼哈希(即md5,sha1),並且每次都使用它們來獲取用戶信息。

+0

除非您有一位可怕的程序員爲您工作,否則您的情況永遠不會發生。 – RiceRiceBaby 2015-09-28 20:39:02

+0

如果你的用戶ID是一個自動遞增的主列(爲什麼它不是?),那麼這不會發生.. – 2017-08-17 05:54:09