📅  最后修改于: 2023-12-03 15:35:47.254000             🧑  作者: Mango
在XML中,有一些字符是特殊的,不能直接出现在XML文档中,否则会导致文档无法正确解析。为了解决这个问题,XML定义了字符实体,即用一些特殊的表达方式来表示这些特殊字符。
下面是一些常用的字符实体:
| 实体 | 实体名称 | 字符 |
| --------------- | ------------ | ------ |
| <
| 小于号 | <
|
| >
| 大于号 | >
|
| &
| & 符号 | &
|
| '
| 单引号 | '
|
| "
| 双引号 | "
|
|
| 空格 |
|
| ©
| 版权符号 | © |
| ®
| 注册符号 | ® |
| ™
| 商标符号 | ™ |
在XML文档中,可以使用以下两种方式表示字符实体:
可以直接在XML文档中使用上述实体名称对应的字符,例如:
<note>
<text>This is a <tag></text>
</note>
这样就可以在XML文档中正确地表示<tag>
这个字符序列。
可以使用实体编码来表示字符实体。实体编码由&
、实体名称或实体数字、分号组成。
例如:
<note>
<text>This is a <tag></text>
</note>
在这个例子中,我们使用了数字实体编码<
和>
来表示<
和>
。
由于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注入攻击。