1.Cookie是什么?
2.竊取的原理是什么?
3.系統如何防Cookie劫持呢?
看完這三個回答,你就明白哪位傳奇大俠是如何成功的!!!
Cookie:
HTTP天然是無狀態的協議,為了維持和跟蹤用戶的狀態,引入了Cookie和Session。Cookie包含了瀏覽器客戶端的用戶憑證,相對較小。Session則維護在服務器,用于維護相對較大的用戶信息。
用通俗的語言,Cookie是鑰匙,Session是鎖芯。
Cookie簡單理解就是鑰匙,每次去服務端獲取資源,需要帶著這把鑰匙,只有自己的鎖芯(資源),才能打開。
如果你丟掉了鑰匙,那沒辦法,只能配一把鑰匙和鎖芯。
但是如果鑰匙被別人拿了,那別人就可以冒充你的身份,去打開你的鎖芯,從而獲取你的信息,甚至挪用你的資金。這是非常危險的。
XSS攻擊:
XSS(CrossSiteScripting)是跨站點腳本攻擊的縮寫。其就是利用站點開放的文本編輯并發布的功能,從而造成攻擊。
其實說的簡單一點,就是輸入javascript腳本,竊取并投遞cookie信息到自己的站點。
比如攻擊者以一個普通用戶登錄進來,然后在輸入框中提交以下數據:
快看,這里有美女在洗澡
攻擊者提交了條帶標簽的數據,該條數據保存于服務器端,而管理員登入時,不小心點擊這個鏈接時,則會把自身的cookie信息投遞給hacker設定的網址:
有了該session-id,攻擊者在會話有效期內即可獲得管理員的權限,并且由于攻擊數據已添加入數據庫,只要攻擊數據未被刪除,那么攻擊還有可能生效,是持久性的。
Cookie劫持的防:
基于XSS攻擊,竊取Cookie信息,并冒充他人身份。
服務端如何防呢?
第一種辦法是:
給Cookie添加HttpOnly屬性,這種屬性設置后,只能在http請求中傳遞,在腳本中,document。cookie無法獲取到該Cookie值。對XSS的攻擊,有一定的防御值。但是對網絡攔截,還是泄露了。
第二種辦法:
在cookie中添加校驗信息,這個校驗信息和當前用戶外置環境有些關系,比如ip,useragent等有關。這樣當cookie被人劫持了,并冒用,但是在服務器端校驗的時候,發現校驗值發生了變化,因此要求重新登錄,這樣也是種很好的思路,去規避cookie劫持。
第三種辦法:
cookie中sessionid的定時更換,讓sessionid按一定頻率變換,同時對用戶而言,該操作是透明的,這樣保證了服務體驗的一致性。