微軟公司于1月26日發(fā)布了IE8 RC1,以下是IE8 RC1中XSS過濾器功能的改進以及bug修復:
·根據(jù)系統(tǒng)所在區(qū)域,強化URL過濾器:
包含某些字節(jié)序列的URL能夠在某些地區(qū)通過Beta 2過濾器,例如,位于中國的系統(tǒng),以下格式的URL就能繞過過濾器:
http://www.fabrikam.com?x=%A0
該過濾器在URL通過正則表達式引擎之前對URLEncoding進行解碼, 在原本的0xA0字節(jié)后面加上0x3C字節(jié)(“<”)能夠使MultiByteToWideChar 失效,這是因為在中國和其他地方, 0XA0 0x3C不是有效的多字節(jié)字符。在這種情況下,這些失效能夠聯(lián)合起來使正則表達式匹配不能區(qū)分大小寫,更糟糕的是,在正則表達式代碼的后節(jié)點, 0xA0 0x3C序列將被解譯為單一的多字節(jié)字符,因此,<字符將不會從輸入內(nèi)容中被發(fā)現(xiàn),相應(yīng)的啟發(fā)式也不會檢測到XSS。
新發(fā)布的IE8 RC1讓正則表達式代碼將所有輸入內(nèi)容作為單個字節(jié)串來處理,在默認字符代碼(可以是多字節(jié))中沒有字符。
·HTTP響應(yīng)中的NULL將導致處理器忽略對大塊HTTP響應(yīng)數(shù)據(jù)
相關(guān)緩沖區(qū)類別是代碼中的rev’d以解決此問題。
·增加保護功能以抵御涉及PHP的stripslashes函數(shù)攻擊情況
PHP的stripslashes 功能能夠刪除輸入內(nèi)容中的反斜線(它也可以用單一反斜線取代雙反斜線),對于PHP開發(fā)者而言,經(jīng)常在輸出字符串前呼叫 stripslashes函數(shù),在這些情況下,如果輸出內(nèi)容啟動了服務(wù)端的XSS跨站腳本漏洞,漏洞仍然可以被濫用,盡管有IE8 XSS過濾器。
以下是XSS Filter Architectural Overview(XSS過濾器架構(gòu)概覽)一文中所討論到的示例:
上面討論的解碼過程是很靈活的,也可以為不同網(wǎng)絡(luò)平臺制品進行解碼。必要的話,該過濾器可以生成額外的簽名(根據(jù)相同輸入數(shù)據(jù)的不同的解譯)。例如,由于不合式的URLEncoded字符可能被不同的網(wǎng)絡(luò)平臺進行不同的處理,因此過濾器必須能夠建立適當?shù)暮灻?BR> 這說明了新功能的表現(xiàn),該過濾器現(xiàn)在可以生成額外簽名,必要時能夠為輸入內(nèi)容的不同解譯進行過濾。這些新簽名旨在彌補PHP的stripslashes函數(shù)功能的不足之處。
似乎現(xiàn)在大家都不推薦使用PHP的“神奇引號”,如果是因為神奇引號功能而使用PHP代碼的stripslashes函數(shù)功能,那么就要預(yù)想到stripslashes在網(wǎng)絡(luò)的使用將會下降。
·增加overlong UTF-8 服務(wù)器的保護功能
與上面討論的PHP函數(shù)Stripslashes變化相類似,如果在輸入中鑒定出超長的UTF-8序列,我們現(xiàn)在可以生成并處理額外簽名。
雖然超長的UTF-8已經(jīng)在RFC 3629中明確禁止了,但在web服務(wù)器平臺還不是特別普遍,還不能解決我們代碼中的這個攻擊矢量。
·增強對防止注入FORM和ISINDEX保護功能
雖然總的來說,微軟沒有阻止通用HTML注入,不過微軟對這兩個可以啟動與攻擊情況(注入腳本攻擊)類似的因素已經(jīng)提高了警惕。
·OBJECT標簽的CODETYPE屬性現(xiàn)在與TYPE屬性一樣
OBJECT標簽的CODETYPE屬性能夠提供和TYPE屬性一樣的功能,IE8 RC1中,這兩個屬性是平起平坐的。
·一般性能改善
例如:預(yù)驗證功能更夠避免某些情況下正則表達式對性能的影響。
·根據(jù)系統(tǒng)所在區(qū)域,強化URL過濾器:
包含某些字節(jié)序列的URL能夠在某些地區(qū)通過Beta 2過濾器,例如,位于中國的系統(tǒng),以下格式的URL就能繞過過濾器:
http://www.fabrikam.com?x=%A0
該過濾器在URL通過正則表達式引擎之前對URLEncoding進行解碼, 在原本的0xA0字節(jié)后面加上0x3C字節(jié)(“<”)能夠使MultiByteToWideChar 失效,這是因為在中國和其他地方, 0XA0 0x3C不是有效的多字節(jié)字符。在這種情況下,這些失效能夠聯(lián)合起來使正則表達式匹配不能區(qū)分大小寫,更糟糕的是,在正則表達式代碼的后節(jié)點, 0xA0 0x3C序列將被解譯為單一的多字節(jié)字符,因此,<字符將不會從輸入內(nèi)容中被發(fā)現(xiàn),相應(yīng)的啟發(fā)式也不會檢測到XSS。
新發(fā)布的IE8 RC1讓正則表達式代碼將所有輸入內(nèi)容作為單個字節(jié)串來處理,在默認字符代碼(可以是多字節(jié))中沒有字符。
·HTTP響應(yīng)中的NULL將導致處理器忽略對大塊HTTP響應(yīng)數(shù)據(jù)
相關(guān)緩沖區(qū)類別是代碼中的rev’d以解決此問題。
·增加保護功能以抵御涉及PHP的stripslashes函數(shù)攻擊情況
PHP的stripslashes 功能能夠刪除輸入內(nèi)容中的反斜線(它也可以用單一反斜線取代雙反斜線),對于PHP開發(fā)者而言,經(jīng)常在輸出字符串前呼叫 stripslashes函數(shù),在這些情況下,如果輸出內(nèi)容啟動了服務(wù)端的XSS跨站腳本漏洞,漏洞仍然可以被濫用,盡管有IE8 XSS過濾器。
以下是XSS Filter Architectural Overview(XSS過濾器架構(gòu)概覽)一文中所討論到的示例:
上面討論的解碼過程是很靈活的,也可以為不同網(wǎng)絡(luò)平臺制品進行解碼。必要的話,該過濾器可以生成額外的簽名(根據(jù)相同輸入數(shù)據(jù)的不同的解譯)。例如,由于不合式的URLEncoded字符可能被不同的網(wǎng)絡(luò)平臺進行不同的處理,因此過濾器必須能夠建立適當?shù)暮灻?BR> 這說明了新功能的表現(xiàn),該過濾器現(xiàn)在可以生成額外簽名,必要時能夠為輸入內(nèi)容的不同解譯進行過濾。這些新簽名旨在彌補PHP的stripslashes函數(shù)功能的不足之處。
似乎現(xiàn)在大家都不推薦使用PHP的“神奇引號”,如果是因為神奇引號功能而使用PHP代碼的stripslashes函數(shù)功能,那么就要預(yù)想到stripslashes在網(wǎng)絡(luò)的使用將會下降。
·增加overlong UTF-8 服務(wù)器的保護功能
與上面討論的PHP函數(shù)Stripslashes變化相類似,如果在輸入中鑒定出超長的UTF-8序列,我們現(xiàn)在可以生成并處理額外簽名。
雖然超長的UTF-8已經(jīng)在RFC 3629中明確禁止了,但在web服務(wù)器平臺還不是特別普遍,還不能解決我們代碼中的這個攻擊矢量。
·增強對防止注入FORM和ISINDEX保護功能
雖然總的來說,微軟沒有阻止通用HTML注入,不過微軟對這兩個可以啟動與攻擊情況(注入腳本攻擊)類似的因素已經(jīng)提高了警惕。
·OBJECT標簽的CODETYPE屬性現(xiàn)在與TYPE屬性一樣
OBJECT標簽的CODETYPE屬性能夠提供和TYPE屬性一樣的功能,IE8 RC1中,這兩個屬性是平起平坐的。
·一般性能改善
例如:預(yù)驗證功能更夠避免某些情況下正則表達式對性能的影響。