XML解析器安全配置

背景说明

应用工程使用XML解析器解析外部传入的XML文件,如果没有做特殊处理,大多会解析XML文件中的外部实体。 如果外部实体包含URI,那么XML解析器会访问URI指定的资源,例如本地或者远程系统上的文件。 该攻击可用于未经授权访问本地计算机上的文件,扫描远程系统,或者导致本地系统拒绝服务。

通过配置XML解析器,禁止加载外部实体。

SAXReader解析器

public static String DDD= “http://apache.org/xml/features/disallow-doctype-decl“;
SAXReader reader = new SAXReader();
reader.setFeature(DDD,true);
reader.setFeature(“http://xml.org/sax/features/external-general-entities“, false);
reader.setFeature(“http://xml.org/sax/features/external-parameter-entities“, false);
Document doc = reader.read(in);

SAXBuilder解析器

SAXBuilder sbe = new SAXBuilder();
sbe.setFeature(“http://apache.org/xml/features/disallow-doctype-decl“,true);
sbe.setFeature(“http://xml.org/sax/features/external-general-entities“, false);
sbe.setFeature(“http://xml.org/sax/features/external-parameter-entities“, false);
StringReader rexml = new StringReader(exchange(xml));
Document doc = sbe.build(rexml);

其他XML解析器使用方法雷同,具体参考官网:
Prevention_Cheat_Sheet”>https://www.owasp.org/index.php/XML_External_Entity(XXE)_Prevention_Cheat_Sheet

猜你喜欢

转载自blog.csdn.net/loongshawn/article/details/81388832