Session依賴於Cookie嗎?


思考

Session依賴於Cookie嗎?
上篇筆記《初始Session》中,有講到Session記錄客戶端狀態的方法步驟,是通過一個名為JSESSIONID的Cookie,然后找到這個客戶端相對應的具體的Session。
這是不是就是說,Session依賴於Cookie呢?如果客戶端禁止了Cookie,那么客戶端就不會記錄名為JSESSIONID的Cookie,下次客戶端請求服務器也不會攜帶該Cookie的值,那么如何獲取到具體客戶端對應的Session呢?

搞清JSESSIONID

初看上面的思考會覺得,Session還真的是依賴於Cookie的呀。
可是如果往細的探究,這個將Session和Cookie牽連起來的JSESSIONID到底起了個什么作用?它的作用可不可以通過其它方式來代替。通過這種方式使得Session不依賴於Cookie。

JSESSIONID這個Cookie到底干了啥?充當了什么角色?
JSESSIONID這個Cookie存儲的value就是服務端記錄該客戶端狀態的Session ID(服務器自己產生,不會重復)。
它所充當的角色就是橋梁,讓具體客戶端能夠找到在服務端相對應的Session。

產生這個名為JSESSIONID的Cookie,是服務端在創建Session的時候產生的。(如果web容器用的是非Tomcat,那么這個Cookie的名字就不叫JSESSIONID了,但是作為使用者,我們不需要關心這個Cookie的名是什么,因為客戶端第二次訪問服務器的時候,服務器通過該Cookie名找到相應的SessionId(Cookie所對應的值)並不需要我們手動實現。

不美好的現實

如果瀏覽器都允許使用Cookie的話,那么很多人都會直接使用服務器產生Session的同時相應給客戶端一個名為JSESSIONID的Cookie。下次客戶端請求服務器給攜帶過來。
的確,這種方式簡單,省事。但是,我們一直強調——Cookie是不安全的 (這也是好多瀏覽器器禁止使用Cookie的原因)

Cookie的安全性

為什么Cookie是不安全的呢?因為Cookie是存在客戶端的,可以通過篡改Cookie的值來達到欺騙服務器的目的,然后 “非法” 的進行一些 “合法” 的操作。

這里我說一下我知道的比較淺顯的篡改(偽造)Cookie方式:

第一步:用合法的身份登錄一個網站(登錄之后的頁面)

第二步:實現偽造Cookie來達到欺騙服務器的目的

打開另外一個瀏覽器,輸入相應網址


pic-1589436077353.png

偽造Cookie


pic-1590651665605.png

通過上述例子,我們可以清楚的了解到Cookie的不安全性,這也是為什么越來越多的企業不會使用Cookie機制來獲取客戶端狀態的原因。
同樣的,和Session相關的名為JSESSIONID的Cookie,安全嗎?雖然說SessionID不可能重復,可是萬一呢?篡改者運氣好到爆呢?剛好把JSESSIONID的值改為另外一個客戶端在服務器上的SessionID。
有關Session的攻擊可以看這篇博客:Session攻擊(會話劫持+固定)與防御

技術就是這樣,因為需求,所以有了這項技術。
同樣的,為了避免Cookie的不安全性,Session最好是不要和Cookie有關(側面的講出了Session可以不依賴於Cookie),因此就有了URL重寫技術


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM