Html富文本過濾
程序背景:80sec注意到很多web應(yīng)用程序在一些場合需要允許一些Html標(biāo)簽,和一些標(biāo)簽里的一些屬性,如一些日志發(fā)表的地方,書寫文章的地方,但是由于程序員對安全的不太了解,或者在自己進(jìn)行的安全過濾時考慮不周,都容易帶來跨站腳本攻擊,在一些web2.0站點(diǎn)甚至引發(fā)Xss Worm。常規(guī)的一些檢測措施包括黑名單,白名單等等,但是都因?yàn)檫^濾得并不全面,很容易被繞過。其實(shí)有另外一種過濾相對嚴(yán)格的方法,就是基于Html語法分析的filter,在滿足應(yīng)用的同時可以最大限度保證程序的安全,一些過濾比較嚴(yán)謹(jǐn)?shù)娜鏨ahoo Mail,Gmail等等就是基于該原理進(jìn)行的過濾。SafeHtml就是其中一款使用Php的開源過濾器。官方站點(diǎn)在:http:///safehtml。
原理介紹:這種filter通過對輸入的文檔進(jìn)行html解析,去掉不合法的標(biāo)簽和字符,如去掉html標(biāo)簽里的\0,得到一個標(biāo)準(zhǔn)的文檔Dom,通過對該Dom的遍歷,結(jié)合自己的策略就可以拋棄如script,link,style,Xml這種危險的標(biāo)簽,然后再針對標(biāo)簽的屬性進(jìn)行過濾,拋棄如On*這種屬性,然后加入對src這種屬性的檢測,只允許特定的協(xié)議,對style屬性進(jìn)行檢測,拋棄非法的style屬性,最后補(bǔ)齊需要閉合的html標(biāo)簽,實(shí)現(xiàn)對整個文檔的過濾。
程序優(yōu)點(diǎn):可以對整個文檔進(jìn)行非常安全的過濾,完全開源,也可以根據(jù)自己的需要進(jìn)行適當(dāng)?shù)恼{(diào)整,來實(shí)現(xiàn)自己的安全需求。
程序缺點(diǎn):非常嚴(yán)格的限制了一些標(biāo)簽的使用,對于整個程序的白名單和黑名單可能需要根據(jù)自己的需要進(jìn)行調(diào)整,而一些調(diào)整可能帶來安全問題,而且在過濾的時候并沒有完全考慮字符集的因素,可能在GBK,Gb2312等字符集下繞過。
程序下載:80sec提供配置好的樣例程序包(包括HTMLSax3類),Planet Chinese Security Community即使用該過濾包。
程序演示:程序測試,如果你有發(fā)現(xiàn)程序的問題,也請與root#聯(lián)系:)