前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >XXE修复方案参考

XXE修复方案参考

作者头像
全栈程序员站长
发布2022-08-31 19:05:19
5710
发布2022-08-31 19:05:19
举报

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

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

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

代码语言:javascript
复制
    例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());
代码语言:javascript
复制
例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());
代码语言:javascript
复制
例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());
代码语言:javascript
复制
例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.cn/142448.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档