cookie安全小知識
一、背景
cookie作為瀏覽器端儲存客戶相關資訊的重要載體,在為我們開發提供方便的同時,也埋下了一些安全隱患。如果在使用過程中不注意,就有可能被圖謀不軌者利用起來,造成安全事故。
二、cookie的同源策略
瀏覽器每次傳送請求時,會根據請求的地址,來判斷自身是否儲存了符合同源策略的cookie,如果有,則會將cookie一起傳送給服務端。
所謂同源判斷,是指:
假設某個cookie名為test,
設定的domain為 :
.cnblogs.com
設定的path為:
/pathtest
那麼,能夠訪問到該cookie的服務地址為:
cnblogs.com i.cnblogs.com 等子域
同時,訪問的路徑必須為:
/pathtest/* 等子路徑
超出這個範圍的路徑與域名,瀏覽器在傳送請求時,是不會cookie-test傳送出去的。
三、cookie的屬性安全設定
1、設定secrue屬性為true
在設定了該屬性後,瀏覽器只會對於https的請求帶上cookie,而http請求是不會帶上cookie資訊的。如果cookie中存在敏感資訊,那麼就很有必要設定該屬性,這樣即便cookie被中間人竊取了,也不會洩露明文資訊。
2、設定httponly屬性為true
通過設定該屬性,cookie將不可被js指令碼讀取,從而無法在客戶端洩露出cookie。不過對於服務端,我們也需要禁止迴應 http trace方法,否則黑客還是可以通過該途徑竊取cookie(該方法常用來debug,服務端會將收到的請求原封不動的回覆給客戶端,自然也包含了cookie資訊)
3、設定samesite 屬性
由Chrome51版本只會瀏覽器在支援,通過該屬性,可以防止不同domain下的請求帶上原網址的cookie,它的可選值為:
strict 、lax、none
當設定為strict時,只有當前網頁地址與cookie的設定完全一致時,才會傳送cookie ,也就是說,如果我在B網站,哪怕是直接點選了某個連結到A網站的地址,這時候瀏覽器向A傳送請求時,是不會帶上cookie的,這樣,能夠有效的預防CSRF攻擊。
當設定為 lax 的時候,能夠允許get請求中帶上cookie,但是post是不行的。
4、設定HostOnly屬性為true
通過該屬性,可以設定cookie是否可以被子域所共享。
參考連結:
cookie的同源策略與作用域:https://www.cnblogs.com/liaojie970/p/7606168.html
cookie安全屬性:https://techblog.topdesk.com/security/cookie-security/