網(wǎng)絡(luò)上常見(jiàn)方案是:
給Cookies加個(gè)加密算法。 給Cookies加個(gè)時(shí)間戳和IP戳,實(shí)際就是讓Cookies在同個(gè)IP下多少時(shí)間內(nèi)失效。
最終使用MD5來(lái)MAC簽名防止篡改……但這樣仍然可以看到明文信息,有一定不安全之處。
我的方案是
cookie==3des(“值,時(shí)間,IP戳”); 最終得到的COOKIE是這樣的:3BD1B32614A528EA
使用3DES來(lái)加密,這樣保證客戶端沒(méi)有明文……。
服務(wù)端檢查的時(shí)候,再解密出來(lái)值,時(shí)間,IP戳,并檢查過(guò)期時(shí)間與IP……不符的需要清空此COOKIE,轉(zhuǎn)向登錄頁(yè)面.
這樣解決了幾個(gè)問(wèn)題
1.客戶端COOKIE無(wú)明文,得到不任何有用信息……如果使用MD5簽名,客戶端勢(shì)必有明文。
2.無(wú)法篡改,一旦篡改后在服務(wù)端解密的時(shí)候就會(huì)出錯(cuò)……防止了暴力破解
3.在網(wǎng)絡(luò)被截獲后,也無(wú)法使用,因?yàn)橛蠭P戳……且IP是加密的,無(wú)法看到明文,所以也無(wú)法使用偽造IP的方式
4.之所以在客戶端存放IP戳,可以使得其在多臺(tái)電腦上存放COOKIE,如果放在服務(wù)端,則只能一臺(tái)電腦用COOKIE登錄了,影響用戶體驗(yàn),且浪費(fèi)性能查詢數(shù)據(jù)庫(kù)……
摘自attilax的專欄