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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python写的我的世界源码+现成

    文章目录不想阅读代码者跳过正派活于话少今天第一次讲Python不要问我为什么之前不讲,就不讲~(假装自己学过python但是不讲)瞧,标题是什么,敢多说吗(我也不敢多说啊)效果图:源码(903行)from__future__importdivisionimportsysimportmathimportrandomimporttimefromcollectionsimportdequefrompygletimportimagefrompyglet.g

    2022年4月14日
    162
  • 数据结构二叉树中序遍历_数据结构二叉树先序

    数据结构二叉树中序遍历_数据结构二叉树先序二叉树中序遍历二叉树中序遍历的实现思想是:访问当前节点的左子树 访问根节点 访问当前节点的右子树图1二叉树以上图1为例,中序遍历的过程如下:访问该二叉树的根节点,找到1 遍历节点1的左子树,找到节点2 遍历节点2的左子树,找到节点4 由于节点4无左孩子,因此找到节点4,并遍历节点4的右子树 由于节点4无右子树,因此节点2的左子树遍历完成,访问节点2 遍历节点2的右子树,找到节点5 由于节点5无左子树,因此访问节点5

    2025年11月15日
    5
  • 《工具癖》从Github下载开源电子书

    《工具癖》从Github下载开源电子书

    2021年5月27日
    131
  • 阿里为什么要在北京建总部_阿里正式offer审批流程

    阿里为什么要在北京建总部_阿里正式offer审批流程开篇由于疫情的缘故,钉钉算是脱颖而出,下载量而话题度直线攀升,巧的是,我也在这个特殊时间里接到了阿里钉钉的邀请。本人毕业于华南地区某不知名211院校,Java方向,目前钉钉三面已经结束,基本可以说是坐上了“直通车”,收到的反馈都是比较好的,跟HR沟通感觉希望很大,按道理来说拿下offer是没有太大问题的,以下内容就是我这次的钉钉远程面试经历的一个分享和一些心得,希望对大家能够有所帮助。以下主要分享…

    2022年9月24日
    5
  • 线程审查生产者和消费者

    线程审查生产者和消费者

    2022年1月6日
    102
  • 虚拟机连接上网的步骤「建议收藏」

    虚拟机连接上网的步骤「建议收藏」1.首先查看本机的可上网的IP地址:我的本机IP地址是192.168.1.5,由此可以推出我的网关地址就是192.168.1.1这个网关就是可以用来访问的一个地址,一般子网掩码都是255.255.255.02.设置本机的Vmare8的IP为静态IP和并且一定要配到这个192.168.1.1这个网关下右键其属性配成对用的网关地址,一定要在一个网段内下面是虚拟机里面的配置,里面有个虚拟机网络编辑这个是可供虚拟机上网的网段,一定要在这个范围之内这个配置完之后

    2022年5月19日
    73

发表回复

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

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