cookie安全性問題
什麼是cookie
指某些網站為了辨別使用者身份、進行session跟蹤而儲存在使用者本地終端上的資料(通常經過加密)。(注:此定義來自百度百科)
cookie對於登入的效果
排除使用者手動刪除瀏覽器cookie以及cookie未過期的情況下,使用者如果在某網站登入過一次,下次訪問這個網站,使用者不需要輸入使用者名稱和密碼就可以進入網站。
cookie的生命週期
建立cookie的時候,會給cookie指定一個值:Expire,它就是指定cookie的有效期,也就是cookie的生命週期,超出設定的這個生命週期,cookie就會被清除。如果給這個值Expire設定為0或者負值,那麼這樣的設定就是在關閉瀏覽器時,就會清除cookie,這種方式更加安全。
為什麼cookie不安全
最大的原因是因為它儲存在瀏覽器端(使用者本地),一些別有用心的人能夠通過瀏覽器截獲cookie(指令碼、利用工具抓取等)。
cookie不安全的表現形式
cookie欺騙
但這時就會去考慮了,既然如此,為何不加密呢?加密後就算拿到cookie不是也沒有用麼?關鍵問題就在這裡了,一些別有用心的人不需要知道這個cookie的具體含義,只需要將這個cookie向伺服器提交(模擬身份驗證),身份驗證通過之後,就可以冒充被竊取cookie對應使用者來訪問網站,甚至獲取到使用者的隱私資訊,對於使用者的隱私造成非常嚴重的危害,這種方式就叫做cookie欺騙。
cookie截獲
cookie以純文字的形式在瀏覽器和伺服器之間傳遞,在web通訊時極容易被非法使用者截獲和利用。非法使用者截獲cookie後,在cookie的有效時間內重新發放給伺服器,那麼這個非法使用者就擁有了這個合法使用者的所有許可權。
Flash的內部程式碼隱患
Flash中有一個getURL()函式,Flash利用它自動開啟指定的頁面。那麼這個就意味著,你在觀看Flash動畫時,在Flash的內部可以悄無聲息的開啟一個極小的不易發現的包含特殊操作的頁面,可以是木馬,可以向遠端輸入當前cookie或者使用者資訊,這是非常危險的,由於這個是Flash內部的操作,所以網站無法禁止,要想避免,儘量開啟本地防火牆以及訪問正規網站。
如何解決cookie安全性問題
第一步:設定cookie有效期不要過長,合適即可
第二步:設定HttpOnly屬性為true
可以防止js指令碼讀取cookie資訊,有效的防止XSS攻擊。
第三步:設定複雜的cookie,加密cookie
(1)cookie的key使用uuid,隨機生成;
(2)cookie的value可以使用複雜組合,比如:使用者名稱+當前時間+cookie有效時間+隨機數。
這樣可以儘可能使得加密後的cookie更難解密,也是保護了cookie中的資訊。
第四步:使用者第一次登入時,儲存ip+cookie加密後的token
每次請求,都去將當前cookie和ip組合起來加密後的token與儲存的token作對比,只有完全對應才能驗證成功。
第五步:session和cookie同時使用
sessionId雖然放在cookie中,但是相對的session更安全,可以將相對重要的資訊存入session。
第六步:如果網站支援https,儘可能使用https
如果網站支援https,那麼可以為cookie設定Secure屬性為true,它的意思是,cookie只能使用https協議傳送給伺服器,而https比http更加安全。