明明只是活着,哀伤却无处不在⋯⋯ 收藏本站
登陆 / 注册 搜索

阅读:8.9K   回复: 3

WEB安全第八课 浏览器端脚本 之四 脚本字符编码

[复制链接]
小执念 古黑浩劫论坛大牛 2016-8-7 19:37 |显示全部楼层

可遇不可求的事:故乡的云,上古的玉,随手的诗,十九岁的你。

管理员
        JavaScript引擎支持好几种常见的反斜杠方式的字符串编码处理,用于转义引号、HTML标记和内嵌在文本里有问题的字符。这些方法包括:
        
        a.对某些控制字符可以使用C风格的速记表达方法(shorthand notation):\b代表退格符,\t水平制表符,\v垂直制表符,\f换页符,代表回车符和\ri代表换行符。ECMAScript和JSONRFC都支持这套转义符系统。
        
        b.3位数字,不足的位数以零填充,按8位原字节八进制字符编码的方式,无前缀(如“\145”代表“e”)。这种衍生自C风格的语法原本并不属于ECMAScript的规范,但实际上各种脚本引擎里的常规JavaScript代码和JSON.parse(...)都支持这种转义。

🧓‏👗🛋😅👎


        
        c.2位数字,不足的位数以零填充,按8位原字节16进制字符编码的方式,前缀为“x”(所以“e”变成“\x65”)。和上一条一样,这项编码并非ECMAScript或RFC4627里的规定,而是源自C语言,但实际上也获得广泛的支持。
        
        d.4位数字,不足的位数以零填充,按16位原字节的16进制Unicode数值编码,前缀加“u”(“e”变成“\u0065”)。这是ECMAScript和RFC4627规定的编码方式,也为所有常见浏览器支持。
        

🤛⛵🍖🚷🦟‏

        e.反斜杠后面跟的是非8进制的数字,也非这些字符“b”、“t”、“v”、“f”、“r”或“n”,并且也不是“x”和“u”,则可以使用反斜杠转义。这种方式下,就按反斜杠后面字符的字面含义直接处理。ECMAScript本来只用这种方式来转义引号和反斜杠字符本身,但实际上,对其他的字符也同样有效。
        
        这种做法其实很容易出现问题,和CSS—样,不应该用这种方式来转义尖括号和其他HTML语法里的分隔符(delimiter)。这是因为JavaScript的解析顺序要晚于HTML的解析,而HTML解析器自身并不认识这种反斜杠的转义方式。
        
        注意:有个颇为隐秘的地方,IE浏览器实际上并不支持垂直制表符(“\V’)这种简化写法,所以,我们可以写出一条很简单(但非常不合规矩!)的代码来测试出是否为IE浏览器:

🦴🥑🆗🦜‍

        
[mw_shl_code=javascript,true]        if("\v"=="v")alert("Looks like Internet Explorer!");
[/mw_shl_code]


👈🏝🥣📵🦋‏
WEB安全第八课 浏览器端脚本 之四 脚本字符编码 IE.jpg
        
        令人吃惊的是,上述各种编码里,只有Unicode转义方式还可以用在字符串之外的位置,而其他的转义方式则不行。尽管这么做看起来有点随便,但这种做法却比CSS里的处理要稍微合理些:因为在JavaScript里,转义编码只能出现在标识符(identifiers)部分,却不能用于对语法有真正影响的符号里。因此以下写法是可以的:
        
[mw_shl_code=javascript,true]        \u00611ert("This displays a message!");
[/mw_shl_code]🧓‌🛍🧬😚💅
        
        而另一方面,想用这种方式来替换圆括号或者引号,却会失败。
        
        和某些C或C++的实现不同,任何JavaScript引擎都不接受字符串跨行的写法。但尽管ECMAScript规范里有一堆不允许的写法,仍然有一个例外:位于行末的单个反斜杠可以无缝地连接多行的字面量。该行为描述如下:
        🧒‏👞😃👈
[mw_shl_code=javascript,true]        var text = '这个写法
                                        是错的。';
                                       
        var text = '这个写法,则相反,\
                                对所有浏览器来说都是OK的。';[/mw_shl_code]🧑‍🍳‌🕶🖨😴🤳

上一篇
下一篇
帖子热度 8909 ℃
糟糕!小执念长得太帅路遇劫匪,赎金 1 个 金币.

巴黎环抱的花海 「龙战于野」 2017-8-31 16:12 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

不错 支持下
柔光的暖阳 「龙战于野」 2018-5-9 16:21 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

看见你们在厚颜无耻的刷经验,还刷的这么俗不可耐,对于你们这种丧心病狂令人发指的行为,我真的很想说:请带上我!
降临1994 「出类拔萃」 2018-5-11 14:06 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

路过 帮顶 嘿嘿#j336:
您需要登录后才可以回帖 登录 | 免费注册  

本版积分规则

快速回复 返回列表