利用HTTP-only Cookie緩解XSS之痛

在Web安全領域,跨站腳本攻擊時最爲常見的一種攻擊形式,也是長久以來的一個老大難問題,而本文將向讀者介紹的是一種用以緩解這種壓力的技術,即HTTP-only cookie。java

咱們首先對HTTP-only cookie和跨站腳本攻擊作了簡單的解釋,而後詳細說明了如何利用HTTP-only cookie來保護敏感數據,最後介紹了實現HTTP-only cookie時肯定瀏覽器版本的具體問題。web

1、XSS與HTTP-only Cookie簡介數據庫

跨站點腳本攻擊是困擾Web服務器安全的常見問題之一。跨站點腳本攻擊是一種服務器端的安全漏洞,常見於當把用戶的輸入做爲HTML提交時,服務器 端沒有進行適當的過濾所致。跨站點腳本攻擊可能引發泄漏Web 站點用戶的敏感信息。爲了下降跨站點腳本攻擊的風險,微軟公司的Internet Explorer 6 SP1引入了一項新的特性。瀏覽器

這個特性是爲Cookie提供了一個新屬性,用以阻止客戶端腳本訪問Cookie。安全

像這樣具備該屬性的cookie被稱爲HTTP-only cookie。包含在HTTP-only cookie中的任何信息暴露給黑客或者惡意網站的概率將會大大下降。下面是設置HTTP-only cookie的一個報頭的示例:服務器

Set-Cookie: USER=123; expires=Wednesday, 09-Nov-99 23:12:40 GMT; HttpOnlycookie

上面咱們介紹了HTTP-only Cookie;下面咱們開始向讀者介紹跨站點腳本攻擊、容許經過腳本訪問的cookie所帶來的潛在危險以及如何經過HTTP-only來下降跨站點腳本攻擊的風險。   app

跨站點腳本攻擊是一種服務器端常見的安全漏洞,它使得黑客能夠欺騙用戶從而致使用戶在某個Web 站點上的敏感信息的泄漏。下面經過一個簡單的示例來解釋一個跨站點腳本攻擊的相關步驟。dom

2、跨站點腳本攻擊示例網站

爲了解釋跨站點腳本攻擊是如何被黑客利用的,咱們假想了下面的一個例子:

A證券公司運行了一個Web 站點,該站點容許您跟蹤某股票的最新價格。爲了提升用戶體驗,登陸A證券公司的Web 站點以後,你將被重定向到www.azhengquan.com/default.asp?name = < script > evilScript()< / script >張三,而且有一個服務器端腳本生成一個歡迎頁面,內容爲「歡迎您回來,張三!」。

你的股票數據被存放在一個數據庫中,而且Web 站點會在你的計算機上放置一個cookie,其中包含了對這個數據庫很是重要的數據。每當你訪問A證券公司站點時,瀏覽器都會自動發送該cookie。

一個黑客發現A證券公司公司的Web 站點存在一個跨站點腳本攻擊缺陷,因此他決定要利用這點來收集你所持股票的名稱等敏感信息。黑客會您你發送一封電子郵件,聲稱您中獎了,而且須要點擊某個連接如「點擊這裏」來領取獎品。注意,該連接將超連接到www.azhengquan.com/default.asp?name=< script >evilScript()< / script > 當您點擊這個連接,映入眼簾您的將是「歡迎您回來!」—— 等等,您的姓名哪裏去了?事實上,單擊電子郵件內的連接以後,你實際上就是在通知A證券公司公司的Web 站點,你的姓名是< script  > evilScript()<  /script >。Web服務器把用這個「名字」生成的HTML返回給你,可是你的瀏覽器會把這個「名字」做爲腳本代碼解釋,腳本執行後便出現了咱們前面看到的一 幕。通常狀況下,支持客戶端腳本是瀏覽器的典型功能之一。若是這個腳本命令瀏覽器向黑客的計算機發回一個cookie,即便這個cookie包含有您的股 票的有關信息,您的瀏覽器也會老老實實地執行。最後,那些來自A證券公司的Web 站點的指令獲取了那個包含敏感信息的cookie。

下面是跨站腳本攻擊的示意圖,它詳細的展現了攻擊的五個步驟。首先,用戶點擊了黑客發來的電子郵件中的一個嵌入的連接(第1步)。因爲跨站點腳本攻 擊缺陷的緣由,這樣會致使用戶的瀏覽器向Web 站點發送一個請求(第2步);服務器端根據該請求會生成一個包含惡意腳本的響應,並將其發回給用戶的瀏覽器(第3步)。當用戶的機器執行返回的惡意代碼時 (第4步),就會將用戶的敏感數據發送給黑客的計算機(第5步)。

咱們能夠看到,這個過程只須要用戶單擊了一個連接,而後就會有指令發送給Web服務器,而後Web服務器生成一個嵌入惡意腳本的網頁;瀏覽器運行這個來自受信任的源的腳本,卻導致信息泄漏給黑客的計算機。跨站點腳本攻擊有許多不一樣的形式,這裏只是其中的一種。

3、用HTTP-only Cookie保護數據

爲了緩解跨站點腳本攻擊帶來的信息泄露風險,Internet Explorer 6 SP1爲Cookie引入了一個新屬性。這個屬性規定,不準經過腳本訪問cookie。使用HTTP-only Cookie後,Web 站點就能排除cookie中的敏感信息被髮送給黑客的計算機或者使用腳本的Web站點的可能性。

Cookie一般是做爲HTTP 應答頭髮送給客戶端的,下面的例子展現了相應的語法(注意,HttpOnly屬性對大小寫不敏感):

Set-Cookie: =[; =]
[; expires=][; domain=]
[; path=][; secure][; HttpOnly]

即便應答頭中含有HttpOnly屬性,當用戶瀏覽有效域中的站點時,這個cookie仍會被自動發送。可是,卻不可以在Internet Explorer 6 SP1中使用腳原本訪問該cookie,即便起初創建該cookie的那個Web 站點也不例外。這意味着,即便存在跨站點腳本攻擊缺陷,而且用戶被騙點擊了利用該漏洞的連接,Internet Explorer也不會將該cookie發送給任何第三方。這樣的話,就保證了信息的安全。
注意,爲了下降跨站點腳本攻擊帶來的損害,一般須要將HTTP-only Cookie和其餘技術組合使用。若是單獨使用的話,它沒法全面抵禦跨站點腳本攻擊。

4、支持HTTP-only Cookie的瀏覽器

若是Web 站點爲不支持HTTP-only Cookie的瀏覽器創建了一個HTTP-only cookie的話,那麼該cookie不是被忽略就是被降級爲普通的能夠經過腳本訪問的cookie。這仍是會致使信息容易被泄露。

對於公司內部網中的web頁面,管理員能夠要求全部用戶都是由支持HTTP-only Cookie的瀏覽器,這樣能保證信息不會因爲跨站點腳本攻擊缺陷而泄露。

對於公共Web 站點,因爲須要支持各類各樣的瀏覽器,這時能夠考慮使用客戶端腳原本肯定不一樣訪問者所使用的瀏覽器的版本。Web 站點能夠經過向支持~的瀏覽器發送敏感信息以減輕跨站點腳本攻擊對Cookie的威脅。對於那些使用不支持HTTP-only Cookie的瀏覽器的訪問者,能夠限制爲其提供的信息或功能,並要求升級他們的軟件。

當肯定Internet Explorer的版本時,重要的是記住Internet Explorer 6 SP1 的用戶代理字符串跟Internet Explorer 6的用戶代理字符串是同樣的。客戶端腳本還必須使用navigator對象的appMinorVersion屬性檢測主版本號,這樣才能肯定出客戶端是否 安裝了Internet Explorer 6 SP1。

5、小結

在Web安全領域,跨站腳本攻擊時最爲常見的一種攻擊形式,也是長久以來的一個老大難問題,而本文將向讀者介紹一種用以緩解這種壓力的技術,即 HTTP-only cookie。咱們首先對HTTP-only cookie和跨站腳本攻擊作了簡單的解釋,而後詳細說明了如何利用HTTP-only cookie來保護敏感數據,最後介紹了實現HTTP-only cookie時肯定瀏覽器版本的具體問題。

 

 


 

 

1.什麼是HttpOnly?

 

若是您在cookie中設置了HttpOnly屬性,那麼經過js腳本將沒法讀取到cookie信息,這樣能有效的防止XSS攻擊

具體一點的介紹請google進行搜索


2.javaEE的API是否支持?

 

目前sun公司尚未公佈相關的API,但PHP、C#均有實現。搞javaEE的兄弟們比較鬱悶了,別急下文有變通實現

 

3.HttpOnly的設置樣例

javaEE

response.setHeader("Set-Cookie", "cookiename=value;
Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly");

具體參數的含義再次不作闡述,設置完畢後經過js腳本是讀不到該cookie的,但使用以下方式能夠讀取

Cookie cookies[]=request.getCookies();

 

C#

HttpCookie myCookie = new HttpCookie("myCookie");
myCookie.HttpOnly = true;
Response.AppendCookie(myCookie);

PHP4

header("Set-Cookie: hidden=value; httpOnly");

 

 

PHP5

setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
相關文章
相關標籤/搜索