栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

从 XSS Payload 学习浏览器解析机制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从 XSS Payload 学习浏览器解析机制

目录

浏览器解析机制遵循规则:

HTML解析 

URL解析

JavaScript解析 

XSS Payload举例: 

案例原文:

一:

二: 

三:

四:

五:

六:

七:Button

八:Button

九:

十:

十一:

十二:

十三:

十四:

十五:

总结:


浏览器解析机制遵循规则:
  1. HTML解析
  2. URL解析
  3. JavaScript解析

解析顺序是HTML——>URL——>JavaScript。

HTML解析 

HTML词法解析细则:

HTML Standardhttps://html.spec.whatwg.org/multipage/parsing.html一个HTML解析器作为一个状态机,它从输入流中获取字符并按照转换规则转换到另一种状态。在解析过程中,任何时候它只要遇到一个'<'符号(后面没有跟'/'符号)就会进入“标签开始状态(Tag open state)”。然后转变到“标签名状态(Tag name state)”,“前属性名状态(before attribute name state)”......最后进入“数据状态(Data state)”并释放当前标签的token。当解析器处于“数据状态(Data state)”时,它会继续解析,每当发现一个完整的标签,就会释放出一个token。

这里有三种情况可以容纳字符实体,“数据状态中的字符引用”,“RCDATA状态中的字符引用”和“属性值状态中的字符引用”。在这些状态中HTML字符实体将会从“&#...”形式解码,对应的解码字符会被放入数据缓冲区中。(这些后面很重要)

解释几个概念

字符实体(character entities)

字符实体是一个转义序列,它定义了一般无法在文本内容中输入的单个字符或符号。一个字符实体以一个&符号开始,后面跟着一个预定义的实体的名称,或是一个#符号以及字符的十进制数字。

HTML字符实体(HTML character entities)

在HTML中,某些字符是预留的。例如在HTML中不能使用“<”或“>”,这是因为浏览器可能误认为它们是标签的开始或结束。如果希望正确地显示预留字符,就需要在HTML中使用对应的字符实体。一个HTML字符实体描述如下:

字符引用(character references)

字符引用包括“字符值引用”和“字符实体引用”。在上述HTML例子中,'<'对应的字符值引用为'<',对应的字符实体引用为‘<’。字符实体引用也被叫做“实体引用”或“实体”。)

现在你大概会明白为什么我们要转义“<”、“>”、“'” (单引号)和“"” (双引号)字符了。

这里要提一下RCDATA的概念。要了解什么是RCDATA,我们先要了解另一个概念。在HTML中有五类元素:

  1. 空元素(Void elements),如, ,等等

  2. 原始文本元素(Raw text elements),有

    于是直接显示

    RCDATA`元素(RCDATA elements)包括`textarea`和`title

    回头看HTML解析器的规则,其中有一种可以容纳字符引用的情况是“RCDATA状态中的字符引用”。这意味着在”或者“”。因此,在“

    Answer: The javascript will NOT execute

    和五一样不解析,”或者“”,在“