分類  >  Web前端 >

XSS進攻一些常用防範方法

tags:    時間:2013-12-10 01:10:19
XSS攻擊一些常用防範方法
  1. 過濾」<」和」>」標記XSS跨站攻擊的最終目標是引入script代碼在用戶的瀏覽器中執行,所以最基本最簡單的過濾方法,就是轉換」<」和』>」標記。
    replace(str, "<", "<")
    replace(str, ">", ">")

  2. HTML屬性過濾
    使用上述的代碼可以過濾掉」<」和」>」標記,讓攻擊者無法構造HTML標記。但是,攻擊者可能會利用已存在的屬性,如插入圖片功能,將圖片的路徑屬性修改為一段script代碼,如
    <img src="javascript:alert(/XSS攻擊/)" width=100>
    上述代碼執行后,同樣可以實現跨站的目的。而且很多的HTML標記里屬性都支持「javascript:跨站代碼」的形式,因此就需要對攻擊者輸入的數據進行如下轉換:
    replace(str, "javascript:", "")
    replace(str, "jscript:", "")
    replace(str, "vbscript:", "")
    一旦用戶輸入的語句中含有」javascript」,」jscript」,」vbscript」,都用空白代替。

  3. 過濾特殊字元:&、回車和空格
    因為HTML屬性的值,可支持」&#ASCii」的形式進行表示,前面的跨站代碼就可以換成這樣:
    <img src="javascript:alert(/XSS攻擊/)" width=100>
    即可突破過濾程序,繼續進行跨站攻擊,使用代碼:
    replace(str, "&", "&")
    上述代碼將」&」替換為了」&」,於是後面的語句就變形失效了。但是還有其他的方式繞過過濾,因為過濾關鍵字的方式具有很多的漏洞。攻擊者可以構造下面的攻擊代碼:
    <img src="javas cript:alert(/XSS攻擊/)" width=100>
    這裡關鍵字被空格,準確的說是Tab鍵進行了拆分,上面的代碼就又失效了,這樣就有考慮將Tab空格過濾,防止此類的跨站攻擊。

  4. HTML屬性跨站的徹底防範
    即使程序設計者徹底過濾了各種危險字元,確實給攻擊者進行跨站入侵帶來了麻煩,攻擊者依然可以利用程序的缺陷進行攻擊,因為攻擊者可以利用前面說的屬性和事件機制,構造執行script代碼。例如,有下面這樣一個圖片標記代碼:
    <img src="#" onerror=alert(/跨站/)>
    這是一個利用onerror事件的典型跨站攻擊示例,於是許多程序設計者對此事件進行了過濾,一旦發現關鍵字」onerror」,就進行轉換過濾。
    然而攻擊者可以利用的時間跨站方法,並不只有onerror一種,各種各樣的屬性都可以進行構造跨站攻擊。例如:
    <img src="#" style="Xss:expression(alert(/跨站/));">
    這樣的事件屬性,同樣是可以實現跨站攻擊的。可以注意到,在「src=」#」」和「style」之間有一個空格,也就是說屬性之間需要空格分隔,於是程序設計者可能對空格進行過濾,以防範此類的攻擊。但是過濾了空格之後,同樣可以被攻擊者突破。
    <img src="#"/**/onerror=alert(/跨站/) width=100>
    這段代碼利用了腳本語言的規則漏洞,在腳本語言中的註釋會被當成一個空白來表示。所以註釋代碼就簡介的達到了空格的效果,使語句得以執行。

推薦閱讀文章

Bookmark the permalink ,來源:互聯網