HttpOnly是怎麼回事?
最近配合公司安全團隊開展一些工作,安全團隊建議,內部系統(使用者端系統有跨域需求,其他方式解決更合適)對接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響應標頭中使用的語法
如果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)也有。
此外,JavaEE 6開始,也可以透過配置檔案WEB-INF/web.xml來配置HttpOnly
對於JavaEE 6之前的Java Enterprise Edition版本,常見的解決方法是使用顯式附加HttpOnly標誌的會話cookie值覆蓋SET-COOKIE HTTP響應頭
粗暴覆蓋並不好,因為JSESSIONID可能已經設定了其他標誌。更好的解決方法是處理先前設定的標誌。實際上,SecurityWrapperResponse 的addCookie方法可以解決這個問題。我們可以編寫一個servlet過濾器
一些實現JavaEE 5的Web應用程式伺服器和實現Java Servlet 2.5(JavaEE 5的一部分)的servlet容器也允許建立HttpOnly會話cookie
例如Tomcat 6可以在context.xml檔案中進行如下設定
四、用好Web應用防火牆
如果程式碼更改不可行或成本太高,可以使用Web應用程式防火牆將HttpOnly新增到會話cookie
Mod_security - using SecRule and Header directives
ESAPI WAF - using add-http-only-flag directive
支援HttpOnly的主流瀏覽器有哪些呢?谷歌了一下,常見的瀏覽器都支援。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31556438/viewspace-2557286/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 什麼是 cookie 的 httponly 屬性CookieHTTP
- DNS快取中毒是怎麼回事?DNS快取
- packagereference 裡面的資產是怎麼回事?Package
- petstore中的machine是怎麼回事?Mac
- 路由器ping不通是怎麼回事?路由器
- 有些網站打不開是怎麼回事?網站
- 執行緒池是怎麼回事(附面試題)執行緒面試題
- 【Java面試】請談談AQS是怎麼回事兒?Java面試AQS
- Unreal 各種指標型別是怎麼回事Unreal指標型別
- reflect: NumField of non-struct type,這是怎麼回事?Struct
- rpm命令沒有反應是怎麼回事?
- ot 這個蛋疼的快取是怎麼回事快取
- 域名暫停解析是怎麼回事?如何恢復解析?
- 網站進入時快時慢是怎麼回事網站
- 用友裡面的形態轉換單是怎麼回事?
- 更改授權後選單不顯示是怎麼回事?
- 軟體開發和產品經理是怎麼回事
- Python 數值中的下劃線是怎麼回事?Python
- 本地連線沒有有效的ip配置是怎麼回事
- active聯機日誌檔案到底是怎麼回事
- seam 後臺報FullTextSessionProxy的錯誤是怎麼回事呢?Session
- 請高手幫我看一下這是怎麼回事
- C#非同步程式設計是怎麼回事(番外)C#非同步程式設計
- SSL證書出錯是怎麼回事?是由哪些原因導致的?
- 用虛擬主機 網站被暫停了是怎麼回事?網站
- 小遊戲使用者來源中的“其他”是怎麼回事?遊戲
- 聊一聊 C# 後臺GC 到底是怎麼回事?C#GC
- DNS劫持是怎麼回事?DNS劫持如何預防?(國科雲)DNS
- V8 的 typeof null 返回 "undefined" 的 bug 是怎麼回事NullUndefined
- 路由器官方宣稱的速率,到底是怎麼回事?路由器
- resin經常將properties檔案丟失是怎麼回事啊?
- win10 雪破圖怎麼解決_win10雪破圖是怎麼回事Win10
- Event Loop 原來是這麼回事OOP
- 換Macbook M1晶片之後,IDEA很卡是怎麼回事?Mac晶片Idea
- iPhone7 Plus電流聲是怎麼回事?嘶嘶聲真相揭秘iPhone
- Windows10商店不再公佈應用數量是怎麼回事Windows
- 軟體開發和產品經理到底是怎麼回事
- 部署hibernate時出現NameAlreadyBoundException異常,是怎麼回事??Exception