ES6中的模板字符串和新XSS Payload

眾所周知,在XSS的實(shí)戰(zhàn)對(duì)抗中,由于防守方經(jīng)常會(huì)采用各種各樣嚴(yán)格的過(guò)濾手段來(lái)過(guò)濾輸入,所以我們使用的XSS Payload也會(huì)根據(jù)實(shí)際情況作出各種各樣的調(diào)整,最常見(jiàn)的如避免括號(hào),避免引號(hào),避免關(guān)鍵字等,以繞開(kāi)過(guò)濾函數(shù)的檢查,從而成功將代碼注入到網(wǎng)頁(yè)中運(yùn)行。

在傳統(tǒng)的XSS Payload變形中,常用的無(wú)非有以下幾種:

  1. 使用String.fromCharCode來(lái)避免關(guān)鍵字,如String.fromCharCode(97,108,101,114,116,40,49,41);

  2. 使用URL編碼來(lái)避免括號(hào)的識(shí)別,如location=’alert%281%29’;

  3. 使用正則對(duì)象的特點(diǎn)來(lái)避開(kāi)引號(hào),如alert(/1/);
    在多年的研究中基本上傳統(tǒng)的變形手段都被研究的差不多了,很難找到創(chuàng)新的繞開(kāi)手段。

然而,近幾年ECMAScript新版本的不斷發(fā)展和推行,在帶來(lái)了各種激動(dòng)人心的語(yǔ)言特性的同時(shí),也不可避免地帶來(lái)了一些新的安全挑戰(zhàn)。本文中所說(shuō)的模板字符串,便是ECMAScript 6草案中的一種新特性。

MDN中所述,模板字符串(Template literals)允許嵌入表達(dá)式,并且支持多行字符串和字符串插補(bǔ)特性。基本語(yǔ)法為以下幾種:

網(wǎng)友評(píng)論