HTML5安全攻防詳析之七:新標簽攻擊
HTML5去掉了很多過時的標簽,例如<center>和<frameset>,同時又引入了許多有趣的新標簽,例如<video>和<audio>標簽可以允許動態(tài)的加載音頻和視頻。
HTML5引入的新標簽包括<Audio>、<Video>、<Canvas>、<Article>、<Footer>等等,而這些標簽又有一些有趣的屬性,例如poster、autofocus、onerror、formaction、oninput,這些屬性都可以用來執(zhí)行javascript。這會導致XSS和CSRF跨域請求偽造。
下面我們要講到就是這些關鍵載體。它允許創(chuàng)建XSS的變種并且可以繞過現(xiàn)有的XSS過濾器。
首先來看一個標簽:
- <video><sourceonerrorsourceonerrorsourceonerrorsourceonerror="javascript:alert(1)“>
它使用了一個source標簽,而沒有指定具體的src,所以后面的onerror方法會立即得到執(zhí)行。
下面是video的poster屬性,它鏈接到一個圖像,是指當視頻未響應或緩沖不足時,顯示的占位符。
- <videopostervideopostervideopostervideoposter=”javascript:alert(1)”>
另外還有HTML5新引入的autofocus和formaction屬性,autofocus會讓元素自動的獲取焦點,而formaction屬性能覆蓋 form 元素的action 屬性。
- [html] view plaincopyprint?
- 01.<inputautofocus onfocus=“alert(1)”>
- 02.<form><buttonformactionbuttonformactionbuttonformactionbuttonformaction="javascript:alert(1)">
在這個項目里存在用戶輸入的地方,我們雖然已經(jīng)針對舊有的標簽以及屬性進行了過濾和清洗,但是還會存在新標簽攻擊的漏洞,攻擊者利用上面的示例方式就可以對系統(tǒng)進行XSS注入攻擊。例如攻擊者輸入http://www.yujie.com/1.php?text=<videoposter=”javascript:alert(1)”>時就能立即運行攻擊腳本。
我們對此攻擊的防御方式是,對前端或者后端的過濾器進行優(yōu)化,添加過濾規(guī)則或者黑名單。