XML 实体

 第三篇: 学习xml 之"实体"篇

         xml包含的7大基础概念:

 

              1、元素  在xml将xml数据划分为不同部分和语义的标签,如:<name></name>

              2、属性  对元素进行描述和修饰。 <item id="1"></item>              

              3、名称空间    类似于c#中的名称空间,用来隔离相同或不同的元素。

              4、实体    内容占位符,用于内容转义,代表一些重复的或无法通过键盘输入或与xml 规范保留字符相冲突的字符数据,有点似类于 c# 中的转义字符。

              5、注释 文档的注解,写程序员都明白

              6、CDATA  CDATA指的是 CharacterData 字符数据,在CDATA块中的字符将以原样输出。xml处理器不做任何解释。xml认为CDATA是纯字符数据,不存在标记和其他元素。 这个有点类似于 c#中的 @符号,我们在一个字符串前使用@与这个CDATA有异曲同工之妙。

              7、处理指令 格式<?name data?>,负责与处理器进行交互,每种xml处理器都有一些命令开关。而处理器指令就是调用这些开关的。每个处理器的开关都不尽相 同。<?xml version="1.0" ?> 这个处理指令是每个xml处理器都支持的。


  xml的七大基础概念中,实体算是最复杂的了,现在开始介绍实体:

   一、实体的作用:

                        A、代替无法输入的字符,键盘只有26个字母和一些简单的标点符号,而字符集中有成N多各种符号是无法在键盘中输入的。这时使用实体来代替。

                        B、代替一些与xml规范保留字相冲突的内容,如:<   >  等等。

                        C、代替大段的重复的文本。

   二、实体的分类:

     实体分为: 参数实体通用实体两种。 参数实体用在DTD定义中。一般的xml文档中都使用通用实体。这里只介绍通用实体。

    
                  
    使用实体之前,必需先声时,声明语句位于xml文档的序言的内部子集中,实体声明必需使用大写方式,如:<!ENTITY myentity "这是一个实体"> ,ENTITY必需是大写的。使用实本时,在实体名称前面加上 & ,并表在后面加上分号:  ;。与HTML中的转义符类似。在以下xml中:&client;引用了一个实体,&241;引用了一个实体。当xml处理器碰到实体引 用时,会使用定义实体时设定的值去代替实体声时。 如下面的示例,当处理器解析到&client;时, 会使用"Mr.Rufus Xavier Sasperilla"来代替这个&client;在解析后的文本中,是看不到&client;的。

 

 

<? xml version="1.0" ?>
  
<! DOCTYPE message="SYSTEM "/xmlstuff/dtds/message.dtd"
[
  <!ENTITY client "Mr.Rufus Xavier Sasperilla"
>
  
<! ENTITY agent "MS. Sally Tashuns" >
  
<! ENTITY phone "<number > 617-555-1299 </ number > ">
]>
< message >
  
< opening > Dear  &client; </ opening >
  
< body > We Have an exciting in Pi &241; ,call   &agent; </ body >
</ message >

 
 1、字符实体 
  
   字符实体用来代表单个字符。字符实体分为以下三种:
 
     a、预定义字符实体
        由XML规范预先定义好了,如 amp 代表&, apos 代表单引号,gt 代表>, 在使用时加上&号,如: &amp; 表示单个字符&, &apos;  表示单引号。

     b、数字字符实体
         在前面我们总结实体的作用时,有一条;可以代表无法输入的字符。这些字符就是使用数字字符实体表示的。我们可以使用某个字符在字符集中的位 置数来表示该字符。 该数字可以使用10进制或16进制的方式表示,在数字前面加上:&# , 比如: ç    16进制的表示:ç , 这两种方式都表示同一个字符。

     c、命名字符实体
                            与数字字符实体类似,只是将数字改为一个更容易记忆的英文标识.

  2、混合内容实体

   混合内容实体是xml中使用得最多的实体,它的值不仅限于单个字符,还可以代表不限长度的各种字符块。混合内容实体分为:内部实体和外部实体

               a、内部混合实体
      内部混合实体表示该实体在xml文档内部定义,内部实体常用来代替经常重复的短语,名称和模板文本。上面的xml示例中,agent 实体就是典型。 除了agent,clietn, phone 实体都是内部混合实体。

    b、外部混合实体
                        一些实体需要代表大块的字符,为了便于文件的管理,可以将这些大块的字符放在其他文件中,这是外部混合实体便发挥作用了。可以在外部文件中定义实体,然后在xml文档中声明并使用它。下面是一个例子:

<? xml version="1.0" ?>
<! DOCTYPE doc SYSTEM "http://www.dtds-r-us.com/generic.dtd"
[
  <!ENTITY part1 SYSTEM "P1.xml"
>
  
<! ENTITY part2 SYSTEM "p2.xml" >
  
<! ENTITY part3 SYSTEM "p3.xml" >
]>
< longdoc >
  
&part1;
  
&part2;
  
&part3;
</ longdoc >

   <!ENTITY part1 SYSTEM "P1.xml"> 声明了一个名称为;“part1"的外部实体,该实体代表的内容处于P1.xml文件中。 part2, part3 也分别代表了 p2.xml, p3.xml 中的内容。

外部混合实体最大的用处是可以将内容太长的xml文档分成几个小的xml文档,便于网络传输。

 
  3、未析实体 

   未体实体代表不同于xml文档内容的其他数据,如:二进制数据等等。当xml处理器无法识别该数据时,不会像对待其他实体一样,去解析它,而是让它保持原样。未析实体的定义与外部混合实体的声明方式类似,只是后面多了个“NDATA”字符和一些数据标识。比如:

<? xml versino="1.0" ?>
<! DOCTYPE doc 
[
  <!ENTITY mypic SYSTEM "photos/erik.gif" NDATA GIF
>
]>
< doc >
   
< para > Here's a picture of me: </ para >
   
&mypic;
</ doc >
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XML实体执行命令漏洞(XML External Entity,简称XXE),是指在XML文档的解析过程中,利用实体注入技术来执行恶意命令的一种攻击方式。对于该问题,以下是一个用300字中文回答: XML实体执行命令java xxe是一种漏洞攻击方式。当解析XML时,攻击者通过在XML文档中注入带有恶意代码的实体,可以导致服务器执行恶意命令或读取敏感数据。 在Java中,XXE漏洞可以通过DocumentBuilderFactory解析XML时使用的解析器特性(如“<!DOCTYPE”、“DOCTYPE”和“<ENTITY>”等)来注入实体。攻击者可以构造恶意的XML文档,通过实体注入技术注入包含恶意代码的外部资源引用。当XML文档被解析时,解析器会尝试从外部资源加载实体,如果攻击者在外部资源中包含了一些系统命令,那么这些命令就会被执行。 为防止XXE漏洞,应对输入进行合理过滤和安全处理。可采取以下几种防护措施:1.禁止或限制解析器使用外部实体和外部DTD文件。2.使用安全的解析器,如Woodstox、SAX、SAXON等,它们可以禁用外部实体和DTD。3.对输入进行严格的验证和过滤,确保只接受合法的XML数据。4.采用白名单机制,限制允许的XML元素、属性和实体。 总之,通过对输入进行严格验证和过滤,禁用或限制外部实体和DTD,选择安全的解析器等措施,可以有效防范XML实体执行命令java xxe漏洞带来的危害。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值