zoukankan      html  css  js  c++  java
  • java中xxe漏洞修复方法

    java中禁止外部实体引用的设置方法不止一种,这样就导致有些开发者修复的时候采用的错误的方法

    之所以写这篇文章是有原因的!最早是有朋友在群里发了如下一个pdf,

     而当时已经是2019年1月末了,应该不是2018年7月份那个引起较大轰动的alipay java sdk的了,我突然虎躯一震,该不是。。。

    进去看了一下,果然是我前不久在github给WxJava提的一个cve漏洞(CVE-2018-20318),由于当时我知道这个不是阿里的官方团队(虽然项目当时已经在github上有一万多个颗星了),所以没有过多留意后续动态,结果才出了这么个幺蛾子。

    言归正传,我当时发现这个漏洞后,开发人员很快就回复马上修复,于是我没有跟进了,后来才发现开发人员修复的方法有问题,于是有外国佬又提了一个cve。。

    漏洞本身没什么好说的就是除了xml字符串时没有禁止引用外部实体,而开发人员第一次修复用的是这个     dbFactory.setExpandEntityReferences(false)

    要知道当时官方的xxe漏洞修复方法最早也用了这个(当时阿里修改了不止一次),顾名思义上面就是禁止实体扩展引用,那为什么就不行呢?有人专门分析过,写的文章是特别长,反正我是没看很懂,大概意思是他和sun公司沟通了很久,sun说:“这个属性设置不是你们想的那样,你们都理解错了”,不承认是自己的问题也不改,就这样 这个问题就一直遗留了。

    这里将正确的修复方法摆出来:

    而dbFactory.setExpandEntityReferences(false) 没什么卵用!!!!

    还要说下第二种方法中:XMLConstants.FEATURE_SECURE_PROCESSING   ===== "http://xml.org/sax/features/external-general-entites"

    这种修复方法是可用的,而在我之前freebuf发表的文章(https://www.freebuf.com/vuls/176837.html)中,我说这种方法不可行。。。

    我当时确实是测试过了的,猜测应该是eclipse当时抽风了。。。

  • 相关阅读:
    Hashset 常用的方法
    List新增的方法
    关于集合
    转载关于sql 注入
    可变参数和preparestatement 结合使用
    数据库连接 中的测试事例,包括工具类,配置文件,查询,增加,以及查询后返回对象
    在静态方法中不能调用非静态变量,但getclass()可以换个形式来调用
    用一个对象中读出信息进行出入的代码片段
    新建maven项目更改 web版本
    elasticsearch 局部更新
  • 原文地址:https://www.cnblogs.com/jinqi520/p/10450553.html
Copyright © 2011-2022 走看看