在 XML 文档中使用 CDATA 元素是否存在漏洞?如果是这样,如果我们在 XML 文档中使用 CDATA 元素会发生什么?
3 回答
我不知道您所说的“漏洞”是什么意思,但是很多人在使用 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 部分。
CDATA 部分只是在 XML 文档中表示字符数据的另一种方式。它的含义与文档中的任何其他(非标记)文本完全相同,只是它的转义方式不同。
没有与 CDATA 相关的额外“漏洞”(当然,您的 XML 解析库中的错误除外)。
易受什么影响?某种注入攻击?CDATA 告诉解析器在不解析的情况下传递内容,所以如果您正在验证您的 XML,我想 CDATA 部分错过了验证步骤。
使用 XML 流的代码应该在模式验证之外进行某种业务验证,因此只有在使用输入之前没有检查输入时才会有风险。