反射型、存储型和 DOM 型 XSS 的特点和区别
1. 反射型 XSS:
特点:恶意代码通过 URL 或 HTTP 请求参数传递到服务器,并在服务器响应中直接反射回客户端执行。
场景:通常发生在用户输入的数据被立即返回而未经过适当过滤的情况下。
攻击方式:攻击者通过构造特殊的 URL 诱使用户点击,或通过发送特制的请求以执行恶意脚本。
2. 存储型 XSS:
特点:恶意脚本被存储在服务器端(例如数据库、日志文件等),并在用户访问相关页面时执行。
场景:当应用将用户输入的恶意内容存储在服务器上,并在后续用户访问时直接展示而未进行清洗。
攻击方式:攻击者将恶意代码提交到服务器,之后所有访问该存储内容的用户都会受到攻击。
3. DOM 型 XSS:
特点:恶意脚本利用客户端 JavaScript 修改 DOM(文档对象模型)结构并执行,无需服务器直接参与。
场景:JavaScript 代码在客户端处理用户输入或 URL 时未进行适当的验证和清理,导致恶意代码执行。
攻击方式:攻击者通过操控 URL、网页的 DOM 结构或客户端 JavaScript,使恶意脚本在浏览器上执行。
区别:
反射型 XSS:攻击依赖于服务器端的响应直接反射恶意代码。
存储型 XSS:恶意代码被存储在服务器上,并在用户访问时执行。
DOM 型 XSS:攻击通过客户端脚本直接操作 DOM,无需服务器参与。
xss的fuzz字典
到XSS挑战靶场打靶
level1
查看源代码可知payload长度为四
直接修改网页即可
level2.2
查看源码
搜索框直接输入代码进行攻击
level.3
查看源码
输入代码测试后与源码比较
可以清晰地看到被实体化
使用oninput事件
level.4
查看源码
发现是双引号闭合
使用html事件
level.5
查看源码可以发现“on”被修改为了“o n”
构造href超链接
浏览器解析机制
浏览器解析机制是指浏览器从接收到网页内容到最终显示给用户的整个过程。这个过程可以分为几个主要步骤:
1. 网络请求:
- 浏览器通过 HTTP/HTTPS 协议向服务器发送请求。
- 服务器响应请求并将网页内容(HTML、CSS、JavaScript 等)发送回浏览器。
2. HTML 解析:
- 浏览器接收到 HTML 内容后,开始解析 HTML 文档。
- 词法分析:HTML 文档被分解成标记,例如开始标签、结束标签、文本等。
- 构建 DOM 树:解析过程中,根据 HTML 标记生成 DOM树。DOM 树表示了 HTML 元素的层次结构和关系。
3. CSS 解析:
- 浏览器解析 CSS 内容并应用到 DOM 元素上。
- 词法分析:CSS 被分解成规则和声明。
- 计算样式:生成样式规则的对象,并计算每个 DOM 元素的最终样式,这些样式会被应用到相应的 DOM 元素上。
4. CSSOM 构建:
- CSSOM(CSS Object Model)是一个表示 CSS 样式的结构化模型,与 DOM 树一起用于布局计算。
- 浏览器将 CSS 规则解析为 CSSOM 树,并将样式应用到 DOM 元素上。
5. 渲染树构建:
- 渲染树由 DOM 树和 CSSOM 共同构建,包含了需要显示的节点和它们的样式。
- 不可见的元素(如 `display: none` 的元素)不会出现在渲染树中。
6. 布局计算:
- 浏览器根据渲染树中的节点计算它们的位置和大小。
- 布局计算确定每个元素在页面上的确切位置和尺寸。
7. 绘制:
- 绘制阶段将布局计算结果转换为实际的图像。
- 浏览器根据渲染树绘制每个节点的内容(文本、图像、背景颜色等)。
8. 合成:
- 合成阶段将绘制的图像合成到屏幕上,生成最终的网页视觉效果。
- 浏览器可能将不同的图层合成在一起(例如,固定定位元素与滚动内容)。
9. JavaScript 执行:
- JavaScript 代码在 HTML 解析过程中被遇到并执行,影响 DOM 树和 CSSOM 的状态。
- DOM 操作:脚本可以动态修改 DOM 树和 CSSOM,导致重新计算布局(Reflow)和绘制。
10. 重绘和重排:
- 重绘:当元素的外观改变但位置和大小不变时,触发重绘。
- 重排:当元素的尺寸或位置改变时,触发重排。这会导致整个页面或部分页面的重新布局。
总结:浏览器解析机制涉及从接收到网页内容到最终显示的多个步骤,包括网络请求、HTML 解析、CSS 解析、渲染树构建、布局计算、绘制以及 JavaScript 执行。每个阶段都有其关键作用,共同决定了网页的最终呈现效果。