当前位置: 首页 > news >正文

dom4j解析xml时取消DTD验证

解决方式整合一下,就分两种:

1、用setFeature()

SAXReader reader = new SAXReader();
reader.setValidation(false); reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
...

2、用setEntityResolver()

SAXReader reader = new SAXReader();
reader.setValidation(false); reader.setEntityResolver(new EntityResolver() { @Override public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { return new InputSource(new ByteArrayInputStream("<?xml version='1.0' encoding='UTF-8'?>".getBytes())); } });
...

这个问题,平时不会去注意,这次记录的主要原因是,在做自定义xml文件解析成key-vlue的形式时,发现时间略长,影响体验,故而mark一下。

 

参考:
setFeature的妙用,解析XML时,外部注入预防即XXE攻击

http://xerces.apache.org/xerces-j/features.html

dom4j解析xml-取消doctype中DTD验证设置

 

 XML防止XXE攻击

描述

    https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing

解决方案:

    https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet

    https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#SAXReader

参考:

 XML文件的解析以及XML外部实体注入防护

 

结合来做就是:

spf.setFeature("http://xml.org/sax/features/external-general-entities", false);
spf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
spf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);

 

 

 

转载于:https://www.cnblogs.com/boomoom/p/9291772.html

相关文章:

  • android 手机权限管理——PermissionsDispatcher
  • 页面加载展示PDF
  • git学习笔记
  • 沉淀,再出发:Java基础知识汇总
  • final 总结
  • Swagger结合mustache模板生成后台接口代码、以及前后台建模代码
  • Java 6中的synchronized
  • less匹配模式
  • 聊聊世界编程语言排行榜的事
  • CF467C George and Job
  • EF6 CodeFirst使用MySql
  • java面试题干货96-125
  • 计算机专业的男女问题
  • 夕阳下,归校的背影
  • 小程序之map地图上不能在覆盖层
  • Google 是如何开发 Web 框架的
  • 【Leetcode】104. 二叉树的最大深度
  • ECS应用管理最佳实践
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • javascript面向对象之创建对象
  • JS函数式编程 数组部分风格 ES6版
  • js中forEach回调同异步问题
  • JS专题之继承
  • Just for fun——迅速写完快速排序
  • Leetcode 27 Remove Element
  • Mysql5.6主从复制
  • Python爬虫--- 1.3 BS4库的解析器
  • Spring-boot 启动时碰到的错误
  • SpringBoot几种定时任务的实现方式
  • windows-nginx-https-本地配置
  • 构造函数(constructor)与原型链(prototype)关系
  • 微服务入门【系列视频课程】
  • 我看到的前端
  • 小程序01:wepy框架整合iview webapp UI
  • 用Visual Studio开发以太坊智能合约
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 怎么将电脑中的声音录制成WAV格式
  • Nginx实现动静分离
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ​水经微图Web1.5.0版即将上线
  • ![CDATA[ ]] 是什么东东
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # 数论-逆元
  • #include到底该写在哪
  • (06)金属布线——为半导体注入生命的连接
  • (编译到47%失败)to be deleted
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (推荐)叮当——中文语音对话机器人
  • (万字长文)Spring的核心知识尽揽其中
  • (已解决)什么是vue导航守卫
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .gitattributes 文件