存儲型xss調研
概念
存儲型XSS,持久化,代碼是存儲在服務器中的,如在個人信息或發表文章等地方,加入代碼,如果沒有過濾或過濾不嚴,那麽這些代碼將儲存到服務器中,用戶訪問該頁面的時候觸發代碼執行。
常見的xss攻擊方法
1. 繞過XSS-Filter,利用<>標簽註入Html/JavaScript代碼;
2. 利用HTML標簽的屬性值進行xss攻擊。例如:<img src=“javascript:alert(‘xss’)”/>;(當然並不是所有的Web瀏覽器都支持Javascript偽協議,所以此類XSS攻擊具有一定的局限性)
3. 空格、回車和Tab。如果XSS Filter
4. 利用事件來執行跨站腳本。例如:<img src=“#” onerror= “alert(1)”/>,當src錯誤的視乎就會執行onerror事件;
5. 利用CSS跨站。例如:body {backgrund-image: url(“javascript:alert(‘xss’)”)};
6. 擾亂過濾規則。例如:<IMG SRC=“javaSCript: alert(/xss/);
7. 利用字符編碼,透過這種技巧,不僅能讓XSS代碼繞過服務端的過濾,還能更好地隱藏Shellcode;(JS支持unicode、eacapes、十六進制、十進制等編碼形式)
8. 拆分跨站法,將xss攻擊的代碼拆分開來,適用於應用程序沒有過濾 XSS關鍵字符(如<、>)卻對輸入字符長度有限制的情況下;
9. DOM型的XSS主要是由客戶端的腳本通過DOM動態地輸出數據到頁面上,它不依賴於提交數據到服務器,而是從客戶端獲得DOM中的數據在本地執行。容易導致DOM型的XSS的輸入源包括:Document.URL、Location(.pathname|.href|.search|.hash)
傳統XSS防禦手段
如何根治XSS呢,這裏可以負責任的告訴你,沒有一種防禦方法是通用萬能的。XSS攻擊方式根據漏洞出現位置、瀏覽器環境、業務環境、攻擊目的、WebServer類型的不同而變化(所以XSSer們往往稱自己為猥瑣流)。它不像其他web漏洞:上傳、SQL註入、文件包涵,僅僅需要在服務器上做下過濾(甚至是安裝一個統一過濾腳本或者WAF)就可以成功防禦的,所以根據實際情況,針對XSS防禦措施也是不同的,大體來說,有以下幾點:
1.服務器端過濾
服務器端轉義輸入的左右尖括號,對HTML標簽進行編碼,這是主流的防禦XSS的方法,可有效防禦一般的XSS攻擊。
2.前端過濾
把變量輸出到頁面時要做好相關的編碼轉義工作,如要輸出到 <script>中,可以進行JS編碼;要輸出到HTML內容或屬性,則進行HTML編碼處理。
輸入過濾,對用戶提交的數據進行有效性驗證,僅接受指定長度範圍內並符合我們期望格式的的內容提交,阻止或者忽略除此外的其他任何數據。比如:電話號碼必須是數字和中劃線組成,而且要設定長度上限。過濾一些些常見的敏感字符,例如:< > ‘ “ & # \ javascript expression "onclick=" "onfocus";過濾或移除特殊的Html標簽, 例如: <script>, <iframe> , < for <, > for >, " for;過濾JavaScript 事件的標簽,例如 "onclick=", "onfocus" 等等。
輸出編碼,當需要將一個字符串輸出到Web網頁時,同時又不確定這個字符串中是否包括XSS特殊字符(如< > &‘”等),為了確保輸出內容的完整性和正確性,可以使用編碼(HTMLEncode)進行處理
3.HttpOnly
在服務器端做配置,在響應頭裏對cookie中的session進行httponly標記,被標記的session無法被js讀出,因此可以有效防禦針對偷取cookie的XSS攻擊。
4.Content Security Policy (CSP)
CSP策略規範了網頁中某個標簽所能加載的第三方域,從協議層把一些存在安全隱患的用法默認給幹掉,把同源同域更發揮到了極致,結合禁止內聯腳本的機制,可以有效防禦大部分XSS攻擊。
缺點: 需要在服務器端進行配置,而且一旦配置不當,正常業務也會受到影響。配置不嚴格又會導致繞過。對於大型的、復雜的網站業務,維護成本較高。
5.XSS防火墻技術
這種技術目前正處於概念階段,並沒有大範圍投入使用,其思路是用js代碼來對當前網頁進行防護,防止發生XSS行為。而且設計理念也是各有不同。
像百度FEX設計的這款,模擬了CSP策略實現了對XSS的防禦。
http://fex.baidu.com/blog/2014/06/xss-frontend-firewall-4/
存儲型xss調研