PCDATA 和 CDATA 的区别

PCDATA

PCDATA 是 可解析字符数据。在XML或HTML中,当解析器遇到 PCDATA 时,它会解析其中的特殊字符。这意味着,如果你的数据中包含 <>& 等字符,解析器会将其视为标签或实体的开始

例如,在XML中:

<note>
  <body>这是一个 &lt;b&gt;粗体&lt;/b&gt; 文本。</body>
</note>

这里的 < 会被解析成 <> 会被解析成 >。如果你在XML元素中直接写入 <script> 标签,解析器会把它当作一个新的节点来处理,而不是纯粹的文本内容。在渗透测试中,如果一个 Web 应用将用户输入作为 PCDATA 处理,但没有进行充分的过滤,攻击者可以注入恶意代码,如 XSS (跨站脚本) 攻击

CDATA

CDATA 是 不可解析字符数据。与 PCDATA 相反,解析器会将其中的所有内容都视为纯文本,不会对 <>& 等特殊字符进行解析。CDATA 块通常用 <![CDATA[ ... ]]> 语法来定义

例如,在XML中:

<note>
  <script_code><![CDATA[
    if (x < 10 && y > 5) {
      alert('Hello!');
    }
  ]]></script_code>
</note>

在这个例子中,CDATA 块内的所有内容,包括 <>&,都会被原封不动地当作字符串来处理。即使代码中包含了类似HTML 标签的字符,解析器也不会将它们当作标签来处理。这使得 CDATA 在需要嵌入包含特殊字符的文本(如代码片段、JavaScript 等)时非常有用

特性 PCDATA (可解析字符数据) CDATA (不可解析字符数据)
解析方式 解析特殊字符(<、>、& 等) 将所有内容视为纯文本,不解析特殊字符
主要用途 包含普通的、可解析的文本内容 包含代码、脚本或其他含有特殊字符的文本
攻击风险 高。如果对用户输入处理不当,容易导致 XSS、XML 实体注入等漏洞。 低。由于其内容被视为纯文本,它能有效防止特殊字符被解释为标签或代码。
攻击场景 当应用程序将用户输入直接放入PCDATA区域,而没有进行充分的转义时,攻击者可以注入 等代码。 除非应用程序对 CDATA 块本身进行了处理或二次解析,否则在 CDATA 内部直接进行注入攻击是无效的。
Copyright © 版权信息 all right reserved,powered by Gitbook该文件修订时间: 2025-09-25 03:12:53

results matching ""

    No results matching ""