Add files via upload

This commit is contained in:
雾島风起時
2025-09-25 03:53:54 +08:00
committed by GitHub
parent 615a4b0552
commit 1ef68405a3
4 changed files with 254 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
### PCDATA 和 CDATA 的区别
**PCDATA**
PCDATA 是 **可解析字符数据**。在XML或HTML中,当解析器遇到 PCDATA 时,它会解析其中的特殊字符。这意味着,如果你的数据中包含 `<``>``&` 等字符,解析器会将其视为标签或实体的开始
例如,在XML中:
```xml
<note>
<body>这是一个 &lt;b&gt;粗体&lt;/b&gt; 文本。</body>
</note>
```
这里的 `<` 会被解析成 `<``>` 会被解析成 `>`。如果你在XML元素中直接写入 `<script>` 标签,解析器会把它当作一个新的节点来处理,而不是纯粹的文本内容。在渗透测试中,如果一个 Web 应用将用户输入作为 PCDATA 处理,但没有进行充分的过滤,攻击者可以注入恶意代码,如 XSS (跨站脚本) 攻击
**CDATA**
CDATA 是 **不可解析字符数据**。与 PCDATA 相反,解析器会将其中的所有内容都视为纯文本,不会对 `<``>``&` 等特殊字符进行解析。CDATA 块通常用 `<![CDATA[ ... ]]>` 语法来定义
例如,在XML中:
```xml
<note>
<script_code><![CDATA[
if (x < 10 && y > 5) {
alert('Hello!');
}
]]></script_code>
</note>
```
在这个例子中,`CDATA` 块内的所有内容,包括 `<``>``&`,都会被原封不动地当作字符串来处理。即使代码中包含了类似HTML 标签的字符,解析器也不会将它们当作标签来处理。这使得 CDATA 在需要嵌入包含特殊字符的文本(如代码片段、JavaScript 等)时非常有用
| 特性 | PCDATA (可解析字符数据) | CDATA (不可解析字符数据) |
| -------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| 解析方式 | 解析特殊字符(<、>、& 等) | 将所有内容视为纯文本,不解析特殊字符 |
| 主要用途 | 包含普通的、可解析的文本内容 | 包含代码、脚本或其他含有特殊字符的文本 |
| 攻击风险 | 高。如果对用户输入处理不当,容易导致 XSS、XML 实体注入等漏洞。 | 低。由于其内容被视为纯文本,它能有效防止特殊字符被解释为标签或代码。 |
| 攻击场景 | 当应用程序将用户输入直接放入PCDATA区域,而没有进行充分的转义时,攻击者可以注入 <script>alert('XSS')</script> 等代码。 | 除非应用程序对 CDATA 块本身进行了处理或二次解析,否则在 CDATA 内部直接进行注入攻击是无效的。 |