種類
XSS攻擊分成
兩類,一類是來自內部的攻擊,主要指的是利用程式自身的漏洞,構造跨站語句,如:dvbbs的showerror.asp存在的跨站漏洞。
另一類則是來自外部的攻擊,主要指的自己構造XSS跨站漏洞網頁或者尋找非目標機以外的有跨站漏洞的網頁。如當我們要滲透一個站點,我們自己構造一個有跨站漏洞的網頁,然後構造跨站語句,通過結合其它技術,如社會工程學等,欺騙目標伺服器的管理員打開。
防禦技術
1.基於特徵的防禦
XSS漏洞和著名的SQL注入漏洞一樣,都是利用了Web頁面的編寫不完善,所以每一個漏洞所利用和針對的弱點都不盡相同。這就給XSS漏洞防禦帶來了困難:不可能以單一特徵來概括所有XSS攻擊。
傳統XSS防禦多採用特徵匹配方式,在所有提交的信息中都進行匹配檢查。對於這種類型的XSS攻擊,採用的模式匹配方法一般會需要對“javascript”這個關鍵字進行檢索,一旦發現提交信息中包含“javascript”,就認定為XSS攻擊。這種檢測方法的缺陷顯而易見:駭客可以通過插入字元或完全編碼的方式躲避檢測:
躲避方法1)在javascript中加入多個tab鍵,得到
< IMG SRC="jav ascript:alert'XSS');" >;
躲避方法2) 在javascript中加入(空格)字元,得到
< IMG SRC="javascri pt:alert'XSS');" >;
躲避方法3) 在javascript中加入(回車)字元,得到
< IMG SRC="jav
ascript:alert'XSS');" >;
躲避方法4)在javascript中的每個字元間加入回車換行符,得到
< IMG SRC="javascrip\r
\nt:alert'XSS');" >
躲避方法5)對"javascript:alert'XSS')"採用完全編碼,得到
< IMGSRC=javascrip?74:alert'XSS') >
上述方法都可以很容易的躲避基於特徵的檢測。而除了會有大量的漏報外,基於特徵的
還存在大量的誤報可能:在上面的例子中,對上述某網站這樣一個地址,由於包含了關鍵字“javascript”,也將會觸發報警。
2 .基於代碼修改的防禦
和SQL注入防禦一樣,XSS攻擊也是利用了Web頁面的編寫疏忽,所以還有一種方法就是從Web套用開發的角度來避免:
步驟1、對所有用戶提交內容進行可靠的輸入驗證,包括對URL、查詢關鍵字、HTTP頭、POST數據等,僅接受指定長度範圍內、採用適當格式、採用所預期的字元的內容提交,對其他的一律過濾。
步驟2、實現Session標記(session tokens)、CAPTCHA系統或者HTTP引用頭檢查,以防功能被第三方網站所執行。
步驟3、確認接收的的內容被妥善的規範化,僅包含最小的、安全的Tag(沒有javascript),去掉任何對遠程內容的引用(尤其是樣式表和javascript),使用HTTP only的cookie。
當然,如上操作將會降低Web業務系統的可用性,用戶僅能輸入少量的制定字元,人與系統間的互動被降到極致,僅適用於信息發布型站點。並且考慮到很少有Web編碼人員受過正規的安全培訓,很難做到完全避免頁面中的XSS漏洞。
3.綜論
XSS攻擊作為Web業務的最大威脅之一,不僅危害Web業務本身,對訪問Web業務的用戶也會帶來直接的影響,如何防範和阻止XSS攻擊,保障Web站點的業務安全,是定位於業務威脅防禦的入侵防禦產品的本職工作。
工作流程
1)惡意用戶,在一些公共區域
(例如,建議提交表單或訊息公共板的輸入表單)輸入一些文本,這些文本被其它用戶看到,但這些文本不僅僅是他們要輸入的文本,同時還包括一些可以在客戶端執行的腳本。如:
this.document = "*********";
2)惡意提交這個表單
3)其他用戶看到這個包括惡意腳本的頁面並執行,獲取用戶的cookie等敏感信息。