寫這篇的目的是,今天群里面提到了HttpOnly這個(gè)標(biāo)簽雌续,所以專門的mark了下。
誰(shuí) 在什么時(shí)候發(fā)明了HttpOnly
2002年微軟為ie6的sp1創(chuàng)造了HttpOnly
什么是HttpOnly
HttpOnly是包含在http返回頭Set-Cookie里面的一個(gè)附加的flag胯杭,所以它是后端服務(wù)器對(duì)cookie設(shè)置的一個(gè)附加的屬性驯杜,在生成cookie時(shí)使用HttpOnly標(biāo)志有助于減輕客戶端腳本訪問(wèn)受保護(hù)cookie的風(fēng)險(xiǎn)(如果瀏覽器支持的話)
下面的例子展示了如何設(shè)置Set-Cookie 返回頭的語(yǔ)法
Set-Cookie: <name>=<value>[; <Max-Age>=<age>]
[; expires=<date>][; domain=<domain_name>]
[; path=<some_path>][; secure][; HttpOnly]
如果HTTP響應(yīng)標(biāo)頭中包含HttpOnly標(biāo)志(可選),客戶端腳本將無(wú)法訪問(wèn)cookie(如果瀏覽器支持該標(biāo)志的話)做个。因此即使客戶端存在跨站點(diǎn)腳本(XSS)漏洞鸽心,瀏覽器也不會(huì)將Cookie透露給第三方。
如果瀏覽器不支持HttpOnly居暖,并且后端服務(wù)器嘗試設(shè)置HttpOnly cookie再悼,瀏覽器也會(huì)忽略HttpOnly標(biāo)志,從而創(chuàng)建傳統(tǒng)的膝但,腳本可訪問(wèn)的cookie。那么該cookie(通常是會(huì)話cookie)容易受到XSS攻擊
使用HttpOnly緩解最常見(jiàn)的XSS攻擊
大多數(shù)XSS攻擊都是針對(duì)會(huì)話cookie的盜竊谤草。后端服務(wù)器可以通過(guò)在其創(chuàng)建的cookie上設(shè)置HttpOnly標(biāo)志來(lái)幫助緩解此問(wèn)題跟束,這表明該cookie在客戶端上不可訪問(wèn)。
如果支持HttpOnly的瀏覽器檢測(cè)到包含HttpOnly標(biāo)志的cookie丑孩,并且客戶端腳本代碼嘗試讀取該cookie冀宴,則瀏覽器將返回一個(gè)空字符串作為結(jié)果。這會(huì)通過(guò)阻止惡意代碼(通常是XSS)將數(shù)據(jù)發(fā)送到攻擊者的網(wǎng)站來(lái)使攻擊失敗温学。
java服務(wù)器設(shè)置HttpOnly
自從采用Java Servlet 3.0之上的容器略贮,很容易在cookie上設(shè)置HttpOnly標(biāo)志。實(shí)際上,setHttpOnly和isHttpOnly方法可在Cookie接口中使用逃延,如下
Cookie cookie = getMyCookie("myCookieName");
cookie.setHttpOnly(true);
在WEB-INF/web.xml的設(shè)置如下
<session-config>
<cookie-config>
? <http-only>true</http-only>
</cookie-config>
</session-config>