目录
无法弹窗
原因:urlcode无法识别协议(javascript: )
html解码顺序:1、html实体编码 2、urlcode编码 3, unicode编码
可以弹窗
首先
先HTML实体编码解码,得到
href中为URL,URL模块可识别为javascript协议,进行URL解码,得到
由于是javascript协议,解码完给JS模块处理,于是被执行
不能弹窗
依然是编码了协议 (javascript:)冒号也属于协议中一部分,导致了url模块不认识这个协议,所以不能弹窗。
不能弹窗
HTML解析器作为一个状态机 在解析过程中,任何时候它只要遇到一个'<'符号(后面没有跟'/'符号)就会进入“标签开始状态(Tag open state)”。然后转变到“标签名状态(Tag name state)”,“前属性名状态(before attribute name state)”......最后进入“数据状态(Data state)”并释放当前标签的token。当解析器处于“数据状态(Data state)”时,它会继续解析,每当发现一个完整的标签,就会释放出一个token。
当解析器解析完“
不能弹窗
RCDATA的概念 在HTML中有五类元素:
空元素(Void elements),如, ,
原始文本元素(Raw text elements),有
不能弹窗
可以弹窗
'html实体编码被解码成 '
不能弹窗
js中unicode编码出符号,但是不能识别符号()" ' + - 。
不能弹窗
原始文本元素(Raw text elements),有
可以弹窗
js中unicode编码出字符,JS中能够识别字符
不能弹窗
和问题八一样不能识别符号
不能弹窗
\u0031\u0032在解码的时候会被unicode解码为字符串12,注意是字符串,不是数字,文字显然是需要引号的
不能弹窗
和问题八一样
可以弹窗
\u000a在JavaScript里是换行,就是\n,直接执行
可以弹窗
先HTML实体编码解码,得到
javascript:协议出来后 urlcode 才能识别,在href中由URL模块处理,解码得到
javascript:\u0061\u006c\u0065\u0072\u0074(15)
然后由JS模块处理,解码得到
javascript:alert(15)