你必须知道的session与cookie
Session本質(zhì)
提到Session我們能聯(lián)想到的就是用戶登錄功能,而本身我們使用Session的基礎(chǔ)是通過(guò)url進(jìn)行訪問(wèn)的,也就是使用http協(xié)議進(jìn)行訪問(wèn)的,而http協(xié)議本身是無(wú)狀態(tài)的,那么問(wèn)題來(lái)了服務(wù)器端是怎么驗(yàn)證客戶端身份的?
答:服務(wù)器端和客戶端驗(yàn)證的聯(lián)系就是sessionid,登錄成功之后服務(wù)器會(huì)自動(dòng)給客戶端一個(gè)session標(biāo)識(shí)也就是sessionid,而sessionid會(huì)存儲(chǔ)到客戶端的cookie里面,每次請(qǐng)求的時(shí)候都會(huì)帶上這個(gè)標(biāo)識(shí),用來(lái)讓服務(wù)器端驗(yàn)證身份的。服務(wù)器端的sessionid一般是存儲(chǔ)在內(nèi)存中的,通過(guò)某種算法加密存儲(chǔ)到服務(wù)器上,客戶端就存儲(chǔ)到cookie里面,當(dāng)頁(yè)面關(guān)閉的時(shí)候客戶端的sessionid就會(huì)消失,而服務(wù)器端的session不會(huì)因?yàn)榭蛻舳说南ФP(guān)閉,而是通過(guò)他本身設(shè)置過(guò)期時(shí)間之后,才會(huì)失效。
總結(jié)來(lái)說(shuō),session本身就是通過(guò)存儲(chǔ)在客戶端的sessionid進(jìn)行身份驗(yàn)證。
那么問(wèn)題來(lái)了,如果客戶端的sessionid被讀取到,就可以偽裝身份,對(duì)系統(tǒng)進(jìn)行破壞了,這就是存儲(chǔ)型XSS了,那怎么來(lái)處理怎么問(wèn)題呢?這就是接下來(lái)要說(shuō)的Cookie了。
?
Cookie屬性HttpOnly
定義:如果cookie中設(shè)置了HttpOnly屬性,那么通過(guò)js腳本將無(wú)法讀取到cookie信息,這樣能有效的防止XSS攻擊,竊取cookie內(nèi)容,這樣就增加了cookie的安全性。
解釋:也就是說(shuō)服務(wù)器端設(shè)置了HttpOnly之后,客戶端是無(wú)法通過(guò)document.cookie獲取到cookie值了,這樣就有效的緩解了XSS攻擊。
服務(wù)器設(shè)置HttpOnly方法:
asp.net:
HttpCookie myCookie = new HttpCookie("myCookie"); myCookie.HttpOnly = true; Response.AppendCookie(myCookie);express(nodejs):
res.cookie('rememberme', '1', {httpOnly: true });然而,設(shè)置HttpOnly只能一定程度的阻止XSS,如果http在傳輸過(guò)程中被劫持了,該怎樣處理這個(gè)問(wèn)題呢?那就是接下來(lái)要說(shuō)的Cookie的另一個(gè)屬性Secure了。
?
Cookie屬性Secure
定義:當(dāng)Secure屬性設(shè)置為true時(shí),cookie只有在https協(xié)議下才能上傳到服務(wù)器,而在http協(xié)議下是沒(méi)法上傳的,所以也不會(huì)被竊聽(tīng)。
解釋:當(dāng)Secure=true時(shí),客戶端的Cookie是不會(huì)上傳到服務(wù)器端的(http協(xié)議)。
asp.net
HttpCookie myCookie = new HttpCookie("myCookie"); //... myCookie.SecurePolicy = CookieSecurePolicy.Always; Response.AppendCookie(myCookie);express(nodejs)
var app = express() var sess = {secret: 'keyboard cat',cookie: {} }if (app.get('env') === 'production') {app.set('trust proxy', 1) // trust first proxysess.cookie.secure = true // serve secure cookies }app.use(session(sess))參考資料:https://github.com/expressjs/session
?
末尾
到此,本文已到尾聲,主要介紹了Session的原理,以及Cookie兩個(gè)非常重要的安全屬性的設(shè)置(HttpOnly/Secure),能力有限,不足之處,歡迎各位斧正~
?
總結(jié)
以上是生活随笔為你收集整理的你必须知道的session与cookie的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 面试官 | 什么是递归算法?它有什么用?
- 下一篇: 漫画:如何证明sleep不释放锁,而wa