XXE修复方案参考

XXE修复方案参考XXE不同的库修复代码,略有差别,但都是通过:1、禁止加载外部实体;2、不允许XML中含有任何自己声明的DTD。可以解决

大家好,又见面了,我是你们的朋友全栈君。

XXE不同的库修复代码,略有差别,但都是通过:

1、禁止加载外部实体;
2、不允许XML中含有任何自己声明的DTD。可以解决


    例1: //DOM Read XML
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();     
            
            /*以下为修复代码*/ 
            //https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#Java
        
            //禁用DTDs (doctypes),几乎可以防御所有xml实体攻击
            dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); //首选
            
            //如果不能禁用DTDs,可以使用下两项,必须两项同时存在
            dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);        //防止外部实体POC 
            dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);   //防止参数实体POC
            /*以上为修复代码*/    
            
            DocumentBuilder db = dbf.newDocumentBuilder();        
            Document doc = db.parse(request.getInputStream());
例2:    //DOM4J Read XML
            SAXReader saxReader = new SAXReader();
                    
            /*以下为修复代码*/ 
            //https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#Java
        
            //禁用DTDs (doctypes),几乎可以防御所有xml实体攻击
            saxReader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); //首选
            
            //如果不能禁用DTDs,可以使用下两项,必须两项同时存在
            saxReader.setFeature("http://xml.org/sax/features/external-general-entities", false);        //防止外部实体POC 
            saxReader.setFeature("http://xml.org/sax/features/external-parameter-entities", false);   //防止参数实体POC
            /*以上为修复代码*/    
            
            Document document = saxReader.read(request.getInputStream());


例3:   //JDOM2 Read XML    
            SAXBuilder builder = new SAXBuilder();    
            
            /*以下为修复代码*/ 
            //https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#Java
        
            //禁用DTDs (doctypes),几乎可以防御所有xml实体攻击
            builder.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); //首选
            
            //如果不能禁用DTDs,可以使用下两项,必须两项同时存在
            builder.setFeature("http://xml.org/sax/features/external-general-entities", false);        //防止外部实体POC 
            builder.setFeature("http://xml.org/sax/features/external-parameter-entities", false);   //防止参数实体POC
            /*以上为修复代码*/    
            
            
            Document document = builder.build(request.getInputStream());
例4:        //SAX Read XML
            SAXParserFactory factory  = SAXParserFactory.newInstance(); 
                    
            /*以下为修复代码*/ 
            //https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#Java
        
            //禁用DTDs (doctypes),几乎可以防御所有xml实体攻击
            factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); //首选
            
            //如果不能禁用DTDs,可以使用下两项,必须两项同时存在
            factory.setFeature("http://xml.org/sax/features/external-general-entities", false);        //防止外部实体POC 
            factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);   //防止参数实体POC
            /*以上为修复代码*/    
            
            
            SAXParser saxparser = factory.newSAXParser();  
            SAXHandler handler = new SAXHandler();      
            saxparser.parse(request.getInputStream(), handler); 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142448.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 增强for循环的语法_增强for循环原理

    增强for循环的语法_增强for循环原理一、概述:也成为【foreach】循环,是JDK1.5版本以后出来的一个高级for循环,专门用来遍历数组和集合的,它的内部原理其实就是iterator迭代器,所以在遍历过程中,不能对集合的元素进行增删操作。二、格式for(元素的数据类型变量名:数组名/集合名{}三、代码演示publicstaticvoidmain(String[]args)…

    2025年7月10日
    2
  • Java面试题大全(2020版)[通俗易懂]

    发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~本套Java面试题大全,全的不能再全,哈哈~一、Java基础1.JDK和JRE有什么区别?JDK:JavaDevelopmentKit的简称,java开发工具包,提供了java的开发环境和运行环境。 JRE:JavaRuntimeEnviron…

    2022年4月9日
    39
  • Java中常见的对象类型简述(DO、BO、DTO、VO、AO、PO)

    Java中常见的对象类型简述(DO、BO、DTO、VO、AO、PO)Java中常见的对象类型简述(DO、BO、DTO、VO、AO、PO)

    2022年4月23日
    266
  • 02.pycharm中配置PyInstaller打包工具

    02.pycharm中配置PyInstaller打包工具我用的环境版本python解释器:3.6.6pycharm开发工具:2018.3.6社区版PyInstaller打包工具:4.5.1pycharm中配置PyInstaller打包工具opts可选的参数参数含义-F-onefile,打包成一个exe文件-D-onefile,创建一个目录,包含exe文件,但会依赖很多文件(默认选项)-c-console,-nowindowed,使用控制台,无窗口(默认)-w-Windowed,-noconsole,使用窗

    2025年7月7日
    4
  • Hello Qt——QMake用户指南[通俗易懂]

    Hello Qt——QMake用户指南[通俗易懂]一、QMake使用QMake提供了一个用于管理应用程序、库、其它组件的构建过程的面向工程系统。QMake扩展了每个工程文件的信息,生成一个执行编译和链接过程的必须命令的MakeFile。1、描述工程工程文件.pro描述了工程信息。工程文件信息会被qmake用于生成包含构建过程中所需的所有命令的MakeFile。工程文件通常包含一系列头文件和源文件,通用配置信息以及音乐程序指定的细节,如应用程序的链接库、搜索路径。工程文件包含一定数量的不同元素,如注释、变量声明、内置函数以及简单的控制结构

    2022年5月19日
    40
  • ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)

    ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)语法格式:row_number()over(partitionby分组列orderby排序列desc)row_number()over()分组排序功能:在使用row_number()over()函数时候,over()里头的分组以及排序的执行晚于where、groupby、orderby的执行。例一:表数据:createtableTEST_…

    2022年4月26日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号