压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

解析檢查——存儲(chǔ)型XSS漏洞解決方案

  Web2.0時(shí)代,XSS漏洞不容小覷。特別是在UGC業(yè)務(wù),支持“安全的”HTML是業(yè)務(wù)必須的特性,這就對(duì)UGC安全過(guò)濾器要求特別高,稍有不慎就會(huì)出現(xiàn)存儲(chǔ)XSS漏洞。

  整篇文章著眼點(diǎn)在“方案”,后續(xù)有機(jī)會(huì)我們還可以說(shuō)說(shuō)API的運(yùn)營(yíng)故事(這個(gè)元老級(jí)項(xiàng)目故事很多)。通過(guò)對(duì)API的精細(xì)化運(yùn)營(yíng)是可以發(fā)現(xiàn)0day漏洞的——API自身的,甚至包括瀏覽器。比如CVE-2009-1862、CVE-2011-2458 以及一些其他八卦。

  存儲(chǔ)型XSS漏洞,這個(gè)作為漏洞界的元老級(jí)漏洞類型,在當(dāng)前web2.0時(shí)代,一旦被利用,對(duì)業(yè)務(wù)造成的影響也將是轟轟烈烈的,比如之前的“XX咖啡廣告”:

  本文的主要目的是和大家一起探討在支持業(yè)務(wù)富文本UGC的前提下,如何有效解決存儲(chǔ)XSS漏洞,如果有寫(xiě)的不對(duì)或遺漏的地方,歡迎大家及時(shí)指正。

  提到XSS漏洞,很多人可能第一印象就是把已公開(kāi)的xsscode弄個(gè)正則全部屏蔽就萬(wàn)事大吉,但是往往事與愿違,付出了巨大的努力,XSS漏洞還依然存在。本文就根據(jù)XSS漏洞生成原理來(lái)逐個(gè)講講如何有效解決該問(wèn)題。

  一:整體過(guò)濾流程圖

  廢話少說(shuō),直接看過(guò)濾流程圖:

  二:屬性值過(guò)濾

  針對(duì)過(guò)濾流程中的標(biāo)簽及黑屬性,這里就不多說(shuō)了,發(fā)現(xiàn)刪除就可以,具體是哪些標(biāo)簽及屬性可參考附件的配置文件,這里重點(diǎn)說(shuō)下屬性值安全

  談到屬性值,才算正式進(jìn)入本篇的重點(diǎn),屬性值大體分為3類

  2.1 URL

  這里指的URL,就是類似href,src等的值,這里核心的就是按照URL標(biāo)準(zhǔn)識(shí)別出引入的URL的協(xié)議,保留允許的協(xié)議即可,比如

  2.2 CSS

  為什么要提到CSS呢,因?yàn)镃SS是富文本UGC的一個(gè)核心,因?yàn)闆](méi)有CSS,QQ空間日志內(nèi)容則達(dá)不到用戶想要的炫酷效果,為了保證CSS的安全,我們又得再實(shí)現(xiàn)一個(gè)CSS語(yǔ)法解析器(由于當(dāng)時(shí)場(chǎng)景需要,我們是自己寫(xiě)的,不過(guò)大家也可以參考CSS Parse的開(kāi)源代碼)。

  由于CSS的強(qiáng)大,所以我們首先定義了一串黑名單,比如出現(xiàn)expression,background,javascript,eval一旦出現(xiàn)這些黑名單,這里之前犯過(guò)一個(gè)錯(cuò)誤,就是采用刪除邏輯,當(dāng)遇到下面的case,真的是欲哭無(wú)淚,后來(lái)評(píng)估正常UGC,極少出現(xiàn)黑名單里的用法,so直接清空css。

  坑1:在完成黑名單清理后,你會(huì)發(fā)現(xiàn)IE瀏覽器竟然兼容如下格式的CSS(強(qiáng)大的)

  坑2:同時(shí)IE還兼容如下格式(&#編碼,尼瑪?shù)闹С志幋a就算了,最后的;還可有可無(wú))

  坑3:你以為他只認(rèn)識(shí)html編碼嘛,其實(shí)你錯(cuò)了,他還認(rèn)識(shí)unicode編碼。

  沒(méi)辦法,統(tǒng)統(tǒng)黑名單搞之:出現(xiàn) 或 &# 統(tǒng)統(tǒng)清空CSS啊,清空CSS。

  坑4:此時(shí),你以為CSS應(yīng)該沒(méi)事了,但是IE又出現(xiàn)新的兼容方式:全角字符

  繼續(xù)搞,只要出現(xiàn)全角字符,一概清空。

  講到Flash安全,就重點(diǎn)保障2個(gè)屬性值設(shè)置合理就行了:

  如果條件允許建議統(tǒng)一設(shè)置為:allowScriptAccess設(shè)置為never,allowNetworking設(shè)置為none

  但是業(yè)務(wù)往往需要這2個(gè)屬性,比如QQ空間日志中要能播放QQ音樂(lè),所以需要首先識(shí)別出引入的Flash地址,然后僅對(duì)白名單的放開(kāi)該權(quán)限即可。

  這里強(qiáng)烈建議大家不要使用object,因?yàn)樗萫mbed處理要麻煩N倍,同時(shí)IE大爺對(duì)它兼容也超好,比如當(dāng)識(shí)別屬性名時(shí),如下編碼格式也是允許的:

  三:重寫(xiě)

  打完收工的最后一步,也是蠻重要的一步,重寫(xiě)這里之前遇到個(gè)坑,就是嚴(yán)格安全用戶的閉合字符來(lái)做,導(dǎo)致被繞的死去活來(lái),后來(lái)一了百了,按照HTML標(biāo)準(zhǔn)直接強(qiáng)制雙引號(hào)閉合,屬性值全部編碼過(guò)濾。

  注:DOM解析識(shí)別出style的閉合字符為空格,在丟棄無(wú)效的css后,結(jié)果變成了有漏洞的版本了。

  四:方案的弊端

  該方案要過(guò)濾的標(biāo)簽、屬性都是要提前已知的,如果出現(xiàn)新標(biāo)簽,則要及時(shí)更新,不然會(huì)出現(xiàn)XSS漏洞,這里就經(jīng)歷過(guò)2次,第一次為html5新增標(biāo)簽、第二次則為L(zhǎng)ISTING特性。

  附:過(guò)濾XSS利用代碼的可執(zhí)行程序及配置文件

  使用方法如下:(demo運(yùn)行環(huán)境為gcc4 & linux32位系統(tǒng))

  ./demo_filterall_aa輸入文件 1 1 輸出文件

  輸入為用戶的UGC:test.html

 

上一篇:立體防御,構(gòu)建河南正骨醫(yī)院安全新網(wǎng)絡(luò)

下一篇:淺析下一代網(wǎng)絡(luò)安全解決方案