1. 程式人生 > 實用技巧 >XSS漏洞防禦之HttpOnly

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/