XML 解析异常问题解决

问题描述

The parser has encountered more than "64000" entity expansions in this document; this is the limit imposed by the JDK.
在运行 Java 应用程序时,出现了 XML 解析异常。具体表现为:

报错信息显示无法创建 StAX(Streaming API for XML)解析器,具体原因是超过了 JDK 默认的 64,000 个实体扩展限制。

以下是日志中的关键部分:


Exception in thread "Thread-6" com.sun.xml.internal.ws.streaming.XMLReaderException: Unable to create StAX reader or writerat com.sun.xml.internal.ws.api.streaming.XMLStreamReaderFactory.create(XMLStreamReaderFactory.java:359)...
Caused by: javax.xml.stream.XMLStreamException: Parser error at [row,col]:[1,1]
Message: JAXP00010004: The parser has encountered more than "64000" entity expansions in this document; this is the limit imposed by the JDK.at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:219)...

异常日志分析

Exception in thread "Thread-6" com.sun.xml.internal.ws.streaming.XMLReaderException: Unable to create StAX reader or writer
...
Caused by: javax.xml.stream.XMLStreamException: Parser error at [row,col]:[1,1]
Message: JAXP00010004: The parser has encountered more than "64000" entity expansions in this document; this is the limit imposed by the JDK.

这个异常信息表明,由于 XML 文档中的实体扩展数量超过了 JDK 的默认限制,导致无法创建 StAX 解析器。JDK(Java 开发工具包)为了防止 XML bomb 攻击,对实体扩展设置了默认限制(64,000 个)。

什么是实体扩展

在 XML 中,实体扩展(Entity Expansion)指的是对 XML 实体(Entities)的引用和替换。实体是 XML 中的一种构造,它允许在文档中定义和使用替代符号,以减少冗余或增强可读性。实体可以是字符实体、参数实体或外部实体。

实体扩展的示例

  1. 字符实体

    • 用于表示某些字符,例如:
      &lt; 表示 <
      &gt; 表示 >
      &amp; 表示 &
      
  2. 内部实体

    • 定义在文档内部的实体。例如:
      <!DOCTYPE example [<!ENTITY example "This is an example entity.">
      ]>
      <example>&example;</example>
      
    • 这里,&example; 是一个实体引用,在解析时会被替换为 This is an example entity.
  3. 外部实体

    • 引用外部资源的实体。例如:
      <!DOCTYPE example [<!ENTITY example SYSTEM "http://example.com/entity.txt">
      ]>
      <example>&example;</example>
      

安全性问题

实体扩展的机制在处理复杂和嵌套的实体引用时,可能会导致安全性问题。特别是,恶意用户可以创建大量嵌套的实体引用,导致解析器在处理时消耗大量资源,进而引发所谓的“XML bomb”攻击。例如:

<!DOCTYPE bomb [<!ENTITY a "aaaaa... (1万次) ...aaaaa"><!ENTITY b "&a;&a;&a;&a;&a;... (1万次) ...&a;"><!ENTITY c "&b;&b;&b;&b;&b;... (1万次) ...&b;">
]>
<bomb>&c;</bomb>

在这种情况下,解析器必须扩展所有这些实体引用,可能会消耗大量的内存和 CPU,导致拒绝服务(DoS)。

JDK 的限制

为了防止这种类型的攻击,JDK 在 XML 解析器中设置了实体扩展的默认限制。这个限制在当前版本中是 64,000 个实体扩展。如果文档中的实体扩展超过这个数量,解析器会抛出异常。

Java 代码层面的解决方法

调整实体扩展限制

为了解决实体扩展数量超限的问题,可以增加 JDK 的实体扩展限制:

  • 运行时设置系统属性

    java -DentityExpansionLimit=100000 -jar your-application.jar
    
  • 代码中设置系统属性

    public class Main {public static void main(String[] args) {System.setProperty("entityExpansionLimit", "100000");// 启动应用程序}
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/46712.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AIGC笔记--基于Stable Diffusion实现图片的inpainting

1--完整代码 SD_Inpainting 2--简单代码 import PIL import torch import numpy as np from PIL import Image from tqdm import tqdm import torchvision from diffusers import AutoencoderKL, UNet2DConditionModel, DDIMScheduler from transformers import CLIPTextMod…

flutter 手写 TabBar

前言&#xff1a; 这几天在使用 flutter TabBar 的时候 我们的设计给我提了一个需求&#xff1a; 如下 Tabbar 第一个元素 左对齐&#xff0c;试了下TabBar 的配置&#xff0c;无法实现这个需求&#xff0c;他的 配置是针对所有元素的。而且 这个 TabBar 下面的 滑块在移动的时…

JDK8升级到JDK17 sun.font.FontDesignMetrics类无效替代方案

问题&#xff1a; 项目从jdk1.8切成jdk17后 FontMetrics fontMetrics FontDesignMetrics.getMetrics(font); 报错&#xff1a; cannot access class sun.font.FontDesignMetrics (in module java.desktop) because module java.desktop does not export sun.font 搜索资料&am…

Spring boot 2.0 升级到 3.3.1 的相关问题 (二)

文章目录 Spring boot 2.0 升级到 3.3.1 的相关问题 &#xff08;二&#xff09;自定义错误处理页面的问题问题描述问题解决 spring.factories 废弃的问题问题描述问题解决 Spring boot 2.0 升级到 3.3.1 的相关问题 &#xff08;二&#xff09; 自定义错误处理页面的问题 问…

4.定时器

原理 时钟源&#xff1a;定时器是内部时钟源&#xff08;晶振&#xff09;&#xff0c;计数器是外部计时长度&#xff1a;对应TH TL计数器初值寄存器(高八位,低八位)对应的中断触发函数 中断源中断处理函数Timer0Timer0_Routine(void) interrupt 1Timer1Timer1_Routine(void) …

爬虫学习 | 01 Web Scraper的使用

目录 背景介绍&#xff1a; 第一部分&#xff1a;Web Scraper简介 1.什么是Web Scraper&#xff1a; Web Scraper&#x1f6d2; 主要用途&#xff1a; 2.为什么选择Web Scraper&#xff1a; 第二部分&#xff1a;安装Web Scraper ​​​​​1.打开google浏览器&#xf…

C语言走马灯文字

目录 开头程序程序的流程图程序的效果结尾 开头 大家好&#xff0c;我叫这是我58。你们听说过走马灯吗&#xff1f;如果没听说过&#xff0c;那也没关系&#xff0c;因为走马灯其实是一种里面的图案会移动的灯笼&#xff0c;而且因为走马灯里面的图案的移动方式有两种&#xf…

【QT学习十五】 QT基本绘图

目录 1. Qt绘图基础 1.1 什么是Qt绘图 1.2 基本绘图类与函数 2. 简单图形绘制 2.1 画线、矩形和椭圆 2.2 绘制文本和图像 3. 高级绘图技巧 3.1 使用QPainterPath绘制复杂图形 3.2 渐变填充与图案填充 4. 绘图性能优化 4.1 双缓冲技术 4.2 使用QPixmap和QImage提高性…

object-C 解答算法:合并两个有序数组(leetCode-88)

合并两个有序数组(leetCode-88) 题目如下图:(也可以到leetCode上看完整题目,题号88) 首先搞懂,什么叫“非递减顺序” 非递减顺序,是指一个序列中的元素从前往后&#xff08;或从左到右&#xff09;保持不减少或相等。 这意味着序列中的元素可以保持相同的值&#xff0c;但不会…

实战:SpringBoot扩展功能ExitCodeGenerator生成的退出代码

1. 简介 ExitCodeGenerator是 Spring Boot 框架中的一个接口&#xff0c;它允许应用程序退出时生成自定义的退出代码。你可以根据不同的退出码&#xff0c;执行相应的动作&#xff0c;如&#xff1a;资源清理&#xff0c;日志记录等。 我们可以通过实现ExitCodeGenerator接口…

全网最适合入门的面向对象编程教程:17 类和对象的Python实现-鸭子类型与“file-like object“

全网最适合入门的面向对象编程教程&#xff1a;17 类和对象的 Python 实现-鸭子类型与“file-like object“ 摘要&#xff1a; 本文主要介绍了 Python 中创建自定义类时鸭子类型的基本定义、特点和应用场景&#xff0c;同时列举了**“file-like object“** 的例子对鸭子类型进…

axios以post方式提交表单形式数据

某些后端框架请求接口必须走form表单提交的那种形式&#xff0c;但前端很少有<form action"接口地址" method"post"></form>这种写法去提交表单数据&#xff0c;所以前端需要用axios模拟一个表单提交接口。 Content-Type 代表发送端&#xff0…

单链表的介绍和实现

前言 Hello,小伙伴们&#xff0c;你们的作者君又回来了&#xff0c;今天我将带领大家继续学习另一种线性表&#xff1a;单链表&#xff0c; 准备好的小伙伴三连打卡上车&#xff0c;你们的支持就是我更新的动力&#xff0c;一定不要吝啬手中的三连哟&#xff0c;万分感谢&…

ElementUI el-select 组件动态设置disabled后,高度变更的问题解决办法

问题描述 Vue2 项目在使用 el-select 组件时&#xff0c;动态将disabled变更为了 true&#xff0c;元素的高度发生了变化。 问题原因 通过浏览器开发人员工具面板&#xff0c;发现&#xff0c;组件内的 input 元素被动态设置了height的样式&#xff1a; 在项目中检查后并…

深度解析:如何优雅地删除GitHub仓库中的特定commit历史

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

three.js创建基础模型

场景是一个三维空间&#xff0c;是所有物品的容器。可以将其想象成一个空房间&#xff0c;里面可以放置要呈现的物体、相机、光源等。 通过new THREE.Scene()来创建一个新的场景。 /**1. 创建场景 -- 放置物体对象的环境*/ const scene new THREE.Scene();场景只是一个三维的…

Lianwei 安全周报|2024.07.15

新的一周又开始了&#xff0c;以下是本周「Lianwei周报」&#xff0c;我们总结推荐了本周的政策/标准/指南最新动态、热点资讯和安全事件&#xff0c;保证大家不错过本周的每一个重点&#xff01; 政策/标准/指南最新动态 01 《人工智能全球治理上海宣言》发布 我们强调共同促…

django学习入门系列之第四点《案例 后台管理样例》

文章目录 往期回顾 前期准备&#xff1a; 导航新建&#xff0c;按钮表格 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><!-- 开发版本 --><link rel"stylesheet…

【php开发系统遇到CPU飙升的思考记录】

PHP开发系统遇到CPU负载飙升到瓶颈时&#xff0c;这里有一些步骤和策略可以快速定位并解决问题&#xff1a; 1. **使用监控工具**: 利用top命令来查看系统的整体CPU使用情况&#xff0c;特别是查看load average&#xff08;平均负载&#xff09;&#xff0c;这可以快速判断系统…

2024-07-16 Unity插件 Odin Inspector6 —— Group Attributes

文章目录 1 说明2 Group 特性2.1 BoxGroup2.2 ButtonGroup2.3 FoldoutGroup2.4 ShowIfGroup / HideIfGroup2.5 HorizontalGroup2.6 ResponsiveButtonGroup2.7 TabGroup2.8 ToggleGroup2.9 VerticalGroup 1 说明 ​ 本文介绍 Odin Inspector 插件中有关 Group 特性的使用方法。…