摘要:針對這個(gè)存儲(chǔ)信息大小,還是做了一些限制的。關(guān)于限制客戶端去訪問的問題,這樣做的目的就是為了保證安全。當(dāng)我們的網(wǎng)頁遭受了攻擊,有一段惡意的腳本插到了網(wǎng)頁中。但同樣要注意,和同樣需要和之前的保持一致。
會(huì)話跟蹤技術(shù)用來跟蹤用戶的整個(gè)會(huì)話,會(huì)話就是用戶在登錄網(wǎng)站后的一系列動(dòng)作,常用的是Cookie和Session,兩者的唯一區(qū)別是前者在瀏覽器記錄信息,后者在服務(wù)器。今天只是簡單的說下Cookie,知道的就算看個(gè)熱鬧,不知道的希望能幫到你。
以上圖片是我抓包得來,從上面的圖片可以看出,cookie中的值是key-value格式的,而且是通過一個(gè)分號和空格來間隔的。
cookie的流程是:服務(wù)器設(shè)置cookie---通過response將cookie傳到前端保存在瀏覽器中---前端訪問后端接口時(shí)在request header中自動(dòng)添加上cookie---服務(wù)端接收到cookie做一些業(yè)務(wù)操作。
那么cookie是怎么工作的呢?首先cookie對于瀏覽器來說只是一個(gè)純文本,瀏覽器的安裝目錄下是會(huì)有一個(gè)專門的文件夾用來保存各個(gè)網(wǎng)站的cookie。當(dāng)從前端發(fā)送請求到后端的時(shí)候,瀏覽器會(huì)自動(dòng)的檢測下是否有cookie,如果有就會(huì)添加到請求的頭信息中,以上是瀏覽器自動(dòng)幫我們做的。
存儲(chǔ)到cookie中的數(shù)據(jù),瀏覽器會(huì)自動(dòng)的放在http請求中,只有是每次請求都必須要發(fā)送給服務(wù)器的數(shù)據(jù)才會(huì)放到cookie,比如身份驗(yàn)證信息。如果是不必要的,必然會(huì)增加網(wǎng)絡(luò)開銷。針對這個(gè)存儲(chǔ)信息大小,cookie還是做了一些限制的。每個(gè)域名下的cookie 的大小最大為4KB,每個(gè)域名下的cookie數(shù)量最多為20個(gè)(但很多瀏覽器廠商在具體實(shí)現(xiàn)時(shí)支持大于20個(gè))。
cookie的屬性包括:過期時(shí)間;域名、路徑等等,這些可以自己設(shè)置,如果不手動(dòng)設(shè)置就會(huì)使用cookie的默認(rèn)設(shè)置。
expires
過期時(shí)間,expires必須是 GMT 格式的時(shí)間(可以通過new Date().toGMTString()或者 new Date().toUTCString() 來獲得)。
如果沒有設(shè)置的話,那么默認(rèn)的有效期就是session,就是會(huì)話cookie,這種會(huì)在瀏覽器關(guān)掉的時(shí)候就沒有了。
domain和path
domain是域名,path是路徑,兩者組合起來就構(gòu)成了 URL,domain和path一起來限制 cookie 能被哪些 URL 訪問。
就是說在訪問這個(gè)域名或者是該域名的子域名下,目錄是在該目錄或者是在該目錄下的子目錄下的時(shí)候,瀏覽器會(huì)自動(dòng)把cookie放到請求頭部中。
如果沒有設(shè)置這兩個(gè)選項(xiàng),則會(huì)使用默認(rèn)值。domain的默認(rèn)值為設(shè)置該cookie的網(wǎng)頁所在的域名,path默認(rèn)值為設(shè)置該cookie的網(wǎng)頁所在的目錄。
兩點(diǎn)需要注意:domain可以設(shè)置為頁面本身的域名,或者是該域名的父域名,比如說,www.sougou.com,可是設(shè)置為www.sougou.com,也可以設(shè)置為sougou.com。
secure
secure選項(xiàng)用來設(shè)置cookie只在確保安全的請求中才會(huì)發(fā)送。當(dāng)請求是HTTPS或者其他安全協(xié)議時(shí),包含 secure 選項(xiàng)的 cookie才能被發(fā)送至服務(wù)器。
默認(rèn)情況下,cookie不會(huì)帶secure選項(xiàng)(即為空)。所以默認(rèn)情況下,不管是HTTPS協(xié)議還是HTTP協(xié)議的請求,cookie 都會(huì)被發(fā)送至服務(wù)端。但要注意一點(diǎn),secure選項(xiàng)只是限定了在安全情況下才可以傳輸給服務(wù)端,但并不代表你不能看到這個(gè) cookie。
httpOnly
這個(gè)選項(xiàng)用來設(shè)置cookie是否能通過 js 去訪問。默認(rèn)情況下,cookie不會(huì)帶httpOnly選項(xiàng)(即為空),所以默認(rèn)情況下,客戶端是可以通過js代碼去訪問(包括讀取、修改、刪除等)這個(gè)cookie的。當(dāng)cookie帶httpOnly選項(xiàng)時(shí),客戶端則無法通過js代碼去訪問操作(包括讀取、修改、刪除等)這個(gè)cookie。
在客戶端是不能通過js代碼去設(shè)置一個(gè)httpOnly類型的cookie的,這種類型的cookie只能通過服務(wù)端來設(shè)置。
關(guān)于限制客戶端去訪問cookie的問題,這樣做的目的就是為了保證安全。
試想:如果任何 cookie 都能被客戶端通過document.cookie獲取會(huì)發(fā)生什么。當(dāng)我們的網(wǎng)頁遭受了 XSS 攻擊,有一段惡意的script腳本插到了網(wǎng)頁中。這段script腳本做的事情是:通過document.cookie讀取了用戶身份驗(yàn)證相關(guān)的 cookie,并將這些 cookie 發(fā)送到了攻擊者的服務(wù)器。攻擊者輕而易舉就拿到了用戶身份驗(yàn)證信息,于是就可以利用此用戶信息訪問目標(biāo)服務(wù)器(因?yàn)楣粽哂泻戏ǖ挠脩羯矸蒡?yàn)證信息,所以會(huì)通過你服務(wù)器的驗(yàn)證)。
下面的這段是從項(xiàng)目中找到的一段關(guān)于設(shè)置cookie的代碼:
public void addCookie(HttpServletResponse response, String cookieValue) { if (this.cookieDomain == null) { throw new IllegalArgumentException("cookies domain is not null"); } else { Cookie cookie = new Cookie(this.coookieName, cookieValue); cookie.setPath(this.cookiePath); if (this.cookieDomain != null) { cookie.setDomain(this.cookieDomain); } if (this.cookieMaxAge != null) { cookie.setMaxAge(this.cookieMaxAge); } if (this.cookieSecure) { cookie.setSecure(true); } if (this.cookieHttpOnly) { cookie.setHttpOnly(true); } response.addCookie(cookie); } }
什么時(shí)候 cookie 會(huì)被覆蓋:cookie中的name、domain、path 這3個(gè)字段數(shù)值都相同的時(shí)候。
如果顯式設(shè)置了 domain,則設(shè)置成什么,瀏覽器就存成什么;但如果沒有顯式設(shè)置,則瀏覽器會(huì)自動(dòng)取 url 的 host 作為 domain 值;
修改 cookie。
要想修改一個(gè)cookie,只需要重新賦值就行,舊的值會(huì)被新的值覆蓋。但要注意一點(diǎn),在設(shè)置新cookie時(shí),path、domain這兩個(gè)字段一定要和之前保持一樣。否則是不會(huì)確定為之前的cookie,而是添加了一個(gè)新的cookie。
刪除 cookie
刪除一個(gè)cookie 也是一樣的,也是重新賦值,只要將這個(gè)新cookie的expires選項(xiàng)設(shè)置為一個(gè)過去的時(shí)間點(diǎn)或者是直接賦值為0就行了。但同樣要注意,path和domain同樣需要和之前的cookie保持一致。
在開發(fā)的過程中,用戶的登錄態(tài)是大部分是放到cookie里,因?yàn)閏ookie自己有著完整的一套配置,包括上文講到的各種屬性和安全問題,總體來說還是比較方便的。
東西不多,也很簡單,希望每個(gè)讀者都能完全消化。
這樣的分享會(huì)一直持續(xù),你的關(guān)注、轉(zhuǎn)發(fā)和點(diǎn)贊是對我最大的支持,感謝。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/73956.html
摘要:如果不指定,默認(rèn)為當(dāng)前文檔的主機(jī)不包含子域名。標(biāo)識指定了主機(jī)下的哪些路徑可以接受該路徑必須存在于請求中。具體的使用參考教程和類似,但是可以直接使用來操作,具體的參看參考聊一聊前端存儲(chǔ)那些事兒聊一聊 cookie 為什么會(huì)有cookie http協(xié)議的無狀態(tài),所謂無狀態(tài)即是服務(wù)器并不是知道這次的請求和上次的請求是不是同一個(gè)client發(fā)來的,就好比你經(jīng)常去一家超市買東西,老板并不記得你是...
摘要:如圖圖顧名思義,,是級別的存儲(chǔ)。如筆者寫的一篇淺析文章聊一聊百度移動(dòng)端首頁前端速度那些事兒讀者們可以嘗試使用。 歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面(不僅僅是代碼):https://segmentfault.com/blog/frontenddriver 在web開發(fā)越來越復(fù)雜的今天,前端擁有的能力也越來越多。其中最重要的一項(xiàng)莫過于web存儲(chǔ)。...
摘要:要快,但是我們的服務(wù)也必須萬無一失,后續(xù)我會(huì)分享百度移動(dòng)端首頁的前端架構(gòu)設(shè)計(jì)那么這樣的優(yōu)化,是如何做到的呢,又如何兼顧穩(wěn)定性,架構(gòu)性,與速度呢別急,讓我們把這些優(yōu)化一一道來。百度移動(dòng)端首頁的很多就是這樣緩存在客戶端的。 歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面(不僅僅是代碼):https://segmentfault.com/blog/fronte...
摘要:所以今天,就和大家一起聊一聊前端的安全那些事兒。我們就聊一聊前端工程師們需要注意的那些安全知識。殊不知,這不僅僅是違反了的標(biāo)準(zhǔn)而已,也同樣會(huì)被黑客所利用。 歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面(不僅僅是代碼):https://segmentfault.com/blog... 隨著互聯(lián)網(wǎng)的發(fā)達(dá),各種WEB應(yīng)用也變得越來越復(fù)雜,滿足了用戶的各種需求...
閱讀 3870·2021-09-10 11:22
閱讀 2325·2021-09-03 10:30
閱讀 3660·2019-08-30 15:55
閱讀 1873·2019-08-30 15:44
閱讀 840·2019-08-30 15:44
閱讀 582·2019-08-30 14:04
閱讀 3042·2019-08-29 17:18
閱讀 1262·2019-08-29 15:04