ES6中的模板字符串和新XSS Payload
众所周知,在XSS的实战对抗中,由于防守方经常会采用各种各样严格的过滤手段来过滤输入,所以我们使用的XSS Payload也会根据实际情况作出各种各样的调整,最常见的如避免括号,避免引号,避免关键字等,以绕开过滤函数的检查,从而成功将代码注入到网页中运行。
在传统的XSS Payload变形中,常用的无非有以下几种:
-
使用String.fromCharCode来避免关键字,如String.fromCharCode(97,108,101,114,116,40,49,41);
-
使用URL编码来避免括号的识别,如location=’alert%281%29’;
-
使用正则对象的特点来避开引号,如alert(/1/);
在多年的研究中基本上传统的变形手段都被研究的差不多了,很难找到创新的绕开手段。
然而,近几年ECMAScript新版本的不断发展和推行,在带来了各种激动人心的语言特性的同时,也不可避免地带来了一些新的安全挑战。本文中所说的模板字符串,便是ECMAScript 6草案中的一种新特性。
如MDN中所述,模板字符串(Template literals)允许嵌入表达式,并且支持多行字符串和字符串插补特性。基本语法为以下几种:
其

