📜  XML-字符实体(1)

📅  最后修改于: 2023-12-03 15:35:47.254000             🧑  作者: Mango

XML-字符实体

在XML中,有一些字符是特殊的,不能直接出现在XML文档中,否则会导致文档无法正确解析。为了解决这个问题,XML定义了字符实体,即用一些特殊的表达方式来表示这些特殊字符。

常用的字符实体

下面是一些常用的字符实体:

| 实体 | 实体名称 | 字符 | | --------------- | ------------ | ------ | | &lt; | 小于号 | < | | &gt; | 大于号 | > | | &amp; | & 符号 | & | | &apos; | 单引号 | ' | | &quot; | 双引号 | " | | &nbsp; | 空格 | | | &copy; | 版权符号 | © | | &reg; | 注册符号 | ® | | &trade; | 商标符号 | ™ |

如何使用字符实体

在XML文档中,可以使用以下两种方式表示字符实体:

  1. 直接使用特殊字符

可以直接在XML文档中使用上述实体名称对应的字符,例如:

<note>
  <text>This is a &lt;tag&gt;</text>
</note>

这样就可以在XML文档中正确地表示<tag>这个字符序列。

  1. 使用实体编码

可以使用实体编码来表示字符实体。实体编码由&、实体名称或实体数字、分号组成。

例如:

<note>
  <text>This is a &#60;tag&#62;</text>
</note>

在这个例子中,我们使用了数字实体编码&#60;&#62;来表示<>

防止XML注入攻击

由于XML实体可以用来表示特殊字符,如果不进行处理,就会导致XML注入攻击。例如:

<user>
  <name>Tom</name>
  <address>123 Main St; DROP TABLE users; --</address>
</user>

在这个例子中,攻击者通过注入一个恶意地址123 Main St; DROP TABLE users; --,就可以抹除整个users表。

为了防止这种攻击,需要对输入的数据进行严格的过滤和转义。

总结

字符实体是一种用于表示XML特殊字符的方式。在编写XML文档时,特别是在从外部获取数据时,需要使用字符实体来避免字符被解释为XML语法,从而导致文档无法正确解析。在处理输入数据时,需要对数据进行严格的过滤和转义,以防止XML注入攻击。