学习了这么久我才发现根本不會绕过,以前以为就是简单的编码转换就好了乱编一通。经过大佬的直接与分享资料之后才算弄懂。记录加深理解。
搜索 浏览器器嘚解析可以分为3步:
这3个解析器协调工作首先搜索 浏览器器接收到一个HTMl文档时,会触发HTML解析器对文档进行词法解析完成HTML解码和DOM树的建竝。接下来JavaScript解析器介入开始对内联的脚本进行解析包括解码操作。如果搜索 浏览器器遇到需要URL的上下文URL解析器也会介入开始解析解码。(URL解析会根据文档中URL的实际位置不同而在不同的时间解析例如遇到Onclick事件需要触发才会执?的代码会跳过,等到事件被触发时才会被解析)
URL编码:%加上字符的ASCII编码对应的2位数字
因此在进行编码绕过的时候要根据当前输入点的位置与输入的内容进行正确的编码绕过。
那么昰绕不过去的因为整体编码就连协议类型(JavaScript)一起编码了,搜索 浏览器器在进行URL解析的时候就会默认为无类型所以只会按照URL的规则进荇解析,但是不会涉及到JavaScript解析器所以在这里这一条命令只像是被一句文本而已。
如果对整体进行HTML实体编码一样无法正确解析执行。因為这个函数是在onclick事件之后才会被解析执行此时参与解析的只有JavaScript和URL解析器,HTML解析器已经不再参与到这个函数内的解码过程了因此HTML实体编碼无法被解析执行。
法成功解析alert(1)因为script块中的编码解析不会调用HTML实体解析器。
(1)在字符串?中Unicode转义序列?(\uXXXX)将永远不?会破坏字符串?的上下?文,因为
其只能被解析成字符串?常量?(JavaScript解析时只有标识符名称不?会当字符串?解析,控制
字符(单双引号、换?行?符等)仅会被解析成标示符名称或者字符串?)
(2)URL解析过程的?一个细节:不?能对协议类型进?行?任何的编码操作否则URL解析器?
(3)RCDATA元素有个特殊情况,在搜索 浏览器器?解析RCDATA元素的过程中解析器?会进
?入“RCDATA状态”。在这个状态中如果遇到"<"字符,会转换到"RCDATA?小于号状态"如
果"<"后没有紧跟"/"和对?面的标签名,解析器?会转换回"RCDATA状态"
<textarea>中,唯?一能被解析器?认作标签的就是</textarea>在其中新建标签,也不会有脚本可以执?
(4)当某些函数的执行改变了当前页面的DOM树结构,HTML解析器会再次执行解析