XSS漏洞防御之HttpOnly


  WWW服務依賴於Http協議實現,Http是無狀態的協議,所以為了在各個會話之間傳遞信息,就需要使用Cookie來標記訪問者的狀態,以便服務器端識別用戶信息。

  Cookie分為內存Cookie和硬盤Cookie,內存Cookie儲存在瀏覽器內存中,關閉瀏覽器則消失。如果是想要利用保存在內存中的Cookie,需要獲取到用戶Cookie+用戶瀏覽器未關閉。如果是硬盤Cookie,則該Cookie是一段時間有效的(有的時候我們登錄網站會出現保持登錄狀態的選項,即保存在硬盤中),這類Cookie獲取到后在其有效期內都是可以進行受害者用戶身份登錄的,進而實現入侵。

  Cookie由變量名與值組成,其屬性里有標准的cookie變量,也有用戶自定義的屬性。Cookie保存在瀏覽器的document對象中,對於存在XSS漏洞的網站,入侵者可以插入簡單的XSS語句執行任意的JS腳本,以XSS攻擊的手段獲取網站其余用戶的Cookie。

  Cookie是通過http response header種到瀏覽器的,設置Cookie的語法為:

Set-Cookie:=[;=][;expiress=][;domain=][;path=][;secure][;httponly]

  Cookie各個參數詳細內容:

  • Set-Cookie:http響應頭,向客戶端發送Cookie。

  • Name=value:每個Cookie必須包含的內容。

  • Expires=date:EXpires確定了Cookie的有效終止日期,可選。如果缺省,則Cookie不保存在硬盤中,只保存在瀏覽器內存中。

  • Domain=domain-name:確定了哪些inernet域中的web服務器可讀取瀏覽器儲存的Cookie,缺省為該web服務器域名。

  • Path=path:定義了web服務器哪些路徑下的頁面可獲取服務器發送的Cookie。

  • Secure:在cookie中標記該變量,表明只有為https通信協議時,瀏覽器才向服務器提交Cookie。

  • Httponly:禁止javascript讀取,如果cookie中的一個參數帶有httponly,則這個參數將不能被javascript獲取;httponly可以防止xss會話劫持攻擊。

  想要獲取到用戶的Cookie,攻擊者通常是利用網站的XSS漏洞進行用戶Cookie的竊取,跨站腳本簡稱xss(cross-site scripting),利用方式主要是借助網站本身設計不嚴謹,導致執行用戶提交的惡意js腳本,對網站自身造成危害。xss漏洞是web滲透測試中最常見而又使用最靈活的一個漏洞。它允許惡意用戶將代碼注入到網頁上,其他用戶在觀看網頁時就會受到影響。這類攻擊通常包含了HTML以及用戶端腳本語言。

  有的網站考慮到這個問題,所以采用瀏覽器綁定技術,例如將Cookie和瀏覽器的User-agent進行綁定,一旦發現綁定不匹配則認為Cookie失效,但是這種方法存在很大的弊端,因為當入侵者獲取到Cookie的同時也能獲取到用戶的User-agent;另一種防止XSS獲取用戶Cookie的方式是將Cookie和Remote-addr相綁定(即與IP綁定),但是這樣的弊端是可能會帶來極差的用戶體驗,如家里的ADSL撥號上網就是每次撥號連接更換一個IP地址。

  所以HttpOnly就應運而生了 ⬇️

  HttpOnly最早由微軟提出,並在IE6 中實現,至今已經逐漸成為一個標准,各大瀏覽器都支持此標准。具體含義就是,如果某個Cookie帶有HttpOnly屬性,那么這一條Cookie將被禁止讀取,也就是說,JavaScript讀取不到此條Cookie,不過在用戶與服務端交互的時候,HttpRequest包中仍然會帶上這個Cookie信息,即用戶與服務端的正常交互不受影響。

  HttpOnly的設置過程十分簡單,而且效果明顯。可以看到在上面的Cookie的參數里面存在:

Httponly:禁止javascript讀取,如果cookie中的一個參數帶有httponly,則這個參數將不能被javascript獲取;httponly可以防止xss會話劫持攻擊。

  該參數如其名,就是設置HttpOnly的。

  但需要注意的是,所有需要設置Cookie的地方,都要給關鍵的Cookie添加上HttpOnly,若有遺漏的話就會功虧一簣。

  另外,HttpOnly不是萬能的,添加了HttpOnly不等於解決了XSS問題,它有助於緩解XSS攻擊,但它並不能解決XSS漏洞的問題,也就是使用了HttpOnly只是在一定程度上抵御XSS盜取Cookie的行為,另外HttpOnly也不能防止入侵者做AJAX提交。嚴格來說HttpOnly並不是為了對抗XSS,它解決的是XSS后的Cookie劫持問題,但是XSS攻擊帶來的不僅僅是Cookie劫持問題,還有竊取用戶信息,模擬身份登錄,操作用戶賬戶等一系列問題。所以除了HttpOnly之外還需要其他的對抗解決方案。

  安全是一個整體,網絡安全沒有銀彈,最好的應對方式是抓住當下,腳踏實地,所有妄想一步解決所有問題的都是耍流氓

  參考鏈接:

https://juejin.im/post/5bac9e21f265da0afe62ec1b

https://www.biaodianfu.com/http-only-cookie-xss.html

https://blog.lsqy.space/2017/08/25/170825%E6%B5%85%E8%B0%88XSS%E6%BC%8F%E6%B4%9E%E6%94%BB%E5%87%BB%E4%B8%8E%E9%98%B2%E5%BE%A1/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM