Cookie的安全往往被程式員們所忽視,首先來了解一下Cookie是什麼?
程式員們用Session在服務端儲存着和使用者相關的資訊,當使用者退出時,或關閉浏覽器時session就失效了,這時程式員們希望通過使用者每次請求時所帶的一些資料來識别之前登入過的使用者,于是在使用者的浏覽器中就出現了Cookie。
Cookie中往往存儲着和使用者相關的資訊,這些資訊有時可以辨別着一個身份,請求跨站僞造(CSRF)就是利用了Cookie代表着一個使用者的特性,因為在浏覽器中,通過一些方法,我們可以修改請求中的cookie,如果改成了和一個已經登入且生效的使用者的cookie一樣,那系統就會誤認為我就是那個已經登入的那個人,而事實我卻并沒有輸入什麼使用者名密碼登入。
那麼如何僞造Cookie呢?其實這是跨站腳本攻擊(XSS)的目的,用一個腳本來擷取别人正在使用的Cookie,再通過郵件或其他方式,将擷取到的Cookie發送給攻擊者。擷取cookie的JS很簡單:
寫cookie的話也很簡單:
要想讓Cookie安全還是有方法的,首先要了解Cookie有哪些屬性:
Name:Cookie的名字
Value:Cookie的值
Domain:Cookie作用在哪個域名下
Path:Cookie作用在什麼上下文
Expires:有效時間
HTTP:httponly,防止JS擷取,隻作用在傳輸過程中
Secure:是否隻作用在HTTPS的方式下
通過設定httponly屬性可以防止cookie被别人竊取僞造,對于HTTPS的接口,最好還要設定Secure也為true。
很少有程式員重視cookie的安全性,更不重視Cookie的httponly功能,導緻了大量的使用者受到甚至财産上的損失。
還有要注意的是Cookie是有作用域和作用上下文的,如果作用域和作用上下文設定不當,服務端是取不到值的,這個在做APP時會常遇到,就是在APP設定了cookie時,在服務端沒生效,因為沒取到。