10

在 XML 文档中使用 CDATA 元素是否存在漏洞?如果是这样,如果我们在 XML 文档中使用 CDATA 元素会发生什么?

4

3 回答 3

13

我不知道您所说的“漏洞”是什么意思,但是很多人在使用 CDATA 部分时会犯一个错误。当一个懒惰的程序员并不真正理解文本转义并试图避免&在 XML 中编码特殊字符的正常过程时,就会发生这种情况。他们认为他们可以逃脱:

print "<element><![CDATA["+textstring+"]]></element>";

虽然这确实会阻止一个<or&字符textstring被视为标记,但它不是无懈可击的,因为 textstring 可能包含一个]]>序列,导致:

<element><![CDATA[ Foo ]]> <bar>I'm an unexpected element!</bar> ]]></element>

这是一个 XML 注入,与 HTML 注入一样,它可能会产生类似 XSS 的安全影响。

所以你仍然需要转义 CDATA 中的一些序列(通常,你会]]>在两个 CDATA 部分之间拆分一个序列)。实际上,使用 CDATA 并不比&以正常方式对文本内容进行编码更容易。所以真的没有理由使用 CDATA 部分。

于 2009-11-13T11:44:10.033 回答
3

CDATA 部分只是在 XML 文档中表示字符数据的另一种方式。它的含义与文档中的任何其他(非标记)文本完全相同,只是它的转义方式不同。

没有与 CDATA 相关的额外“漏洞”(当然,您的 XML 解析库中的错误除外)。

于 2009-11-13T11:08:39.487 回答
0

易受什么影响?某种注入攻击?CDATA 告诉解析器在不解析的情况下传递内容,所以如果您正在验证您的 XML,我想 CDATA 部分错过了验证步骤。

使用 XML 流的代码应该在模式验证之外进行某种业务验证,因此只有在使用输入之前没有检查输入时才会有风险。

于 2009-11-13T11:07:08.693 回答