我有一個小的web應用程序,它使用了大量的ajax。有人登錄後,我們需要保持持久性的是他們的user_id和group_idCookie + db token +會話身份驗證,我可以不使用會話嗎
我首先進行身份驗證的方式,我只是將它們存儲爲cookie中的明確txt($ _COOKIE ['user_id'],$ _COOKIE ['group_id '])。顯然這是不好的,因爲你可以修改兩個值!
我不是一個有經驗的程序員,也不需要這個應用程序的大量驚人的安全。但那很糟糕。
因此,我開始在數據庫中創建一個令牌,該令牌存儲user_id,group_id和哈希令牌,然後僅將該令牌放入Cookie中。一旦令牌被認證(cookie匹配數據庫),user_id和group_id被創建爲會話。
這是更安全的,但是不得不管理user_id和group_id會話(超時,重新初始化)而僅僅從cookie中抓取它們的事情已經引起了很多的悲傷,並使我的應用程序的實際功能變得不可靠。
現在接受我的技能水平,並且我的應用程序的簡單管理+強大功能比高級別安全性更重要......我想知道是否可以取消會話並通過做出妥協仍然存儲在cookie中,而是沿着與散列的USER_ID和組ID - 即
COOKIE [ '標記'] = user_id_val + group_id_val + hash_in_db
將如下所示:23-144-jhwr8324398fjk2j49083223n23
所以我只需要一個小函數來解析這個字符串,並從中做一切事情。有人可以改變值,但顯然哈希不匹配。
可以嗎?
作爲替代方案,請閱讀每個腳本頂部的cookie值,並且每次都將新用戶標識和組標識拉出。這樣,只要cookie存在,你的會話就不會超時。 – 2010-11-16 21:10:24
你仍然需要維護一個有效的令牌列表,否則有人可能會開始在其中放置不同的ID,並且你可以全部使用:'22_345_fasfsdfdfklsdflk' ...當然,哈希可能不匹配,但是有彩虹表和強力,找出你使用的任何靜態鹽不會太難。再次提醒我使用常規會話的問題是什麼(基於PHP的會話)? – ircmaxell 2010-11-16 21:21:04
對於這個應用程序,'記住我'的行爲是默認的,因爲它通常保持在後臺打開。所以一個cookie是必要的。所以爲了簡單起見,如果我可以從cookie中做到這一切,那就更好了。此外,目前,我正嘗試在cookie上進行身份驗證,並在每個腳本的頂部重新創建會話(如果需要的話),但它看起來有點不自然。對不起,我不能更確切。我意識到,適當的會話管理會很好,但只要沒有不安全感,我堅持使用僅限cookie的路由似乎更容易。 – orchid 2010-11-16 21:32:21