Files
2025-10-13 01:41:47 +08:00

40 lines
2.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### 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区域,而没有进行充分的转义时,攻击者可以注入 XSS 等代码 | 除非应用程序对 CDATA 块本身进行了处理或二次解析,否则在 CDATA 内部直接进行注入攻击是无效的 |