HttpOnly是怎麼回事?

普通程式設計師發表於2019-01-14

最近配合公司安全團隊開展一些工作,安全團隊建議,內部系統(使用者端系統有跨域需求,其他方式解決更合適)對接SSO建議開啟HttpOnly。HttpOnly?沒聽說過,趕緊百度一下。

一、什麼是HttpOnly

根據Jordan Wiens一篇部落格《No cookie for you!》記載,HttpOnly cookie最初是由Microsoft Internet Explorer開發人員於2002年在Internet Explorer 6 SP1的版本中實現。

微軟開發者網站介紹,HttpOnly是Set-Cookie HTTP響應頭中包含的附加標誌。生成cookie時使用HttpOnly標誌有助於降低客戶端指令碼訪問受保護cookie的風險(如果瀏覽器支援它)。

以下示例顯示了HTTP響應標頭中使用的語法 

HttpOnly是怎麼回事?

如果HTTP響應頭中包含HttpOnly標誌,只要瀏覽器支援HttpOnly標誌,客戶端指令碼就無法訪問cookie。因此,即使存在跨站點指令碼(XSS)缺陷,且使用者意外訪問利用此漏洞的連結,瀏覽器也不會向第三方透露cookie。

如果瀏覽器不支援HttpOnly並且網站嘗試設定HttpOnly cookie,瀏覽器會忽略HttpOnly標誌,從而建立一個傳統的,指令碼可訪問的cookie。

二、使用HttpOnly減輕最常見的XSS攻擊

根據微軟Secure Windows Initiative小組的高階安全專案經理Michael Howard的說法,大多數XSS攻擊的目的都是盜竊cookie。服務端可以透過在它建立的cookie上設定HttpOnly標誌來緩解這個問題,指出不應在客戶端上訪問cookie。

客戶端指令碼程式碼嘗試讀取包含HttpOnly標誌的cookie,如果瀏覽器支援HttpOnly,則返回一個空字串作為結果。這樣能夠阻止惡意程式碼(通常是XSS攻擊)將cookie資料發到攻擊者網站。

三、透過Java設定HttpOnly

自Java Enterprise Edition 6(JavaEE 6)採用Java Servlet 3.0技術以來,程式設計上很容易在cookie上設定HttpOnly標誌。

事實上,Cookie有兩個方法setHttpOnly和isHttpOnly,cookie(JSESSIONID)也有。 

HttpOnly是怎麼回事?

此外,JavaEE 6開始,也可以透過配置檔案WEB-INF/web.xml來配置HttpOnly

HttpOnly是怎麼回事?

對於JavaEE 6之前的Java Enterprise Edition版本,常見的解決方法是使用顯式附加HttpOnly標誌的會話cookie值覆蓋SET-COOKIE HTTP響應頭

HttpOnly是怎麼回事?

粗暴覆蓋並不好,因為JSESSIONID可能已經設定了其他標誌。更好的解決方法是處理先前設定的標誌。實際上,SecurityWrapperResponseaddCookie方法可以解決這個問題。我們可以編寫一個servlet過濾器 

HttpOnly是怎麼回事?

一些實現JavaEE 5的Web應用程式伺服器和實現Java Servlet 2.5(JavaEE 5的一部分)的servlet容器也允許建立HttpOnly會話cookie

例如Tomcat 6可以在context.xml檔案中進行如下設定 

HttpOnly是怎麼回事?

四、用好Web應用防火牆

如果程式碼更改不可行或成本太高,可以使用Web應用程式防火牆將HttpOnly新增到會話cookie

Mod_security - using SecRule and Header directives

ESAPI WAF - using add-http-only-flag directive

支援HttpOnly的主流瀏覽器有哪些呢?谷歌了一下,常見的瀏覽器都支援。 

HttpOnly是怎麼回事?

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31556438/viewspace-2557286/,如需轉載,請註明出處,否則將追究法律責任。

相關文章