当前位置:   article > 正文

[连载2]高端java课程-代码审计中常见漏洞的特征函数-xxe-补充篇(框架设计者的无奈)_java代码审计危险函数

java代码审计危险函数

[高端java课程]系列讲座

我在一个软件中发现了一个类XXEUtil,主要作用是阻止出现xxe漏洞,进行一个预防措施,这确实是一个好的方案。

奈何!这个方案有个重大的弱点,他不是类似spring框架的AOP编程的思想实现的切面编程,需要开发人员在实际使用xml的时候调用这个类中的方法。

我截取了这个类的代码如下:

  1. import javax.xml.parsers.DocumentBuilderFactory;
  2. import javax.xml.stream.XMLInputFactory;
  3. import javax.xml.transform.sax.SAXTransformerFactory;
  4. import org.apache.commons.logging.Log;
  5. import org.apache.commons.logging.LogFactory;
  6. import org.dom4j.io.SAXReader;
  7. import org.jdom.input.SAXBuilder;
  8. import org.xml.sax.XMLReader;
  9. public class XXEUtil {
  10. private static final Log LOG = LogFactory.getLog(XXEUtil.class);
  11. public static void prevent(XMLReader reader) {
  12. if(reader != null) {
  13. try {
  14. reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
  15. } catch (Exception var2) {
  16. LOG.warn(var2);
  17. }
  18. }
  19. }
  20. public static void prevent(XMLInputFactory factory) {
  21. if(factory != null) {
  22. try {
  23. factory.setProperty("javax.xml.stream.supportDTD", Boolean.valueOf(false));
  24. factory.setProperty("javax.xml.stream.isSupportingExternalEntities", Boolean.valueOf(false));
  25. } catch (Exception var2) {
  26. LOG.warn(var2);
  27. }
  28. }
  29. }
  30. public static void prevent(SAXReader reader) {
  31. if(reader != null) {
  32. try {
  33. reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
  34. reader.setFeature("http://xml.org/sax/features/external-general-entities", false);
  35. reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
  36. } catch (Exception var2) {
  37. LOG.warn(var2);
  38. }
  39. }
  40. }
  41. public static void prevent(SAXBuilder builder) {
  42. if(builder != null) {
  43. try {
  44. builder.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
  45. builder.setFeature("http://xml.org/sax/features/external-general-entities", false);
  46. builder.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
  47. } catch (Exception var2) {
  48. LOG.warn(var2);
  49. }
  50. }
  51. }
  52. public static void prevent(SAXTransformerFactory sf) {
  53. if(sf != null) {
  54. try {
  55. sf.setAttribute("http://javax.xml.XMLConstants/property/accessExternalDTD", "");
  56. sf.setAttribute("http://javax.xml.XMLConstants/property/accessExternalStylesheet", "");
  57. } catch (Exception var2) {
  58. LOG.warn(var2);
  59. }
  60. }
  61. }
  62. public static void prevent(DocumentBuilderFactory dbf) {
  63. if(dbf != null) {
  64. try {
  65. dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
  66. } catch (Exception var2) {
  67. LOG.warn(var2);
  68. }
  69. }
  70. }
  71. }

而我在全部代码中搜索,发现仅有一处地方调用了这个类的prevent函数。

  1. public SXWFileParser(File file) {
  2. try {
  3. this.setFile(file);
  4. String ex = file.getAbsolutePath();
  5. this.redXArchive = new RedXArchive(ex);
  6. this.reader = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
  7. this.reader.setFeature("http://xml.org/sax/features/validation", false);
  8. this.reader.setFeature("http://xml.org/sax/features/external-general-entities", false);
  9. this.reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
  10. this.reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
  11. this.reader.setFeature("http://xml.org/sax/features/namespaces", true);
  12. XXEUtil.prevent(this.reader);
  13. this.handle = new RedXWriterContentHandler();
  14. this.reader.setContentHandler(this.handle);
  15. this.reader.setEntityResolver(this.handle);
  16. } catch (Exception var3) {
  17. log.error(var3.getMessage(), var3);
  18. }
  19. }

[高端java课程]本章重点

  1. 国人开发的东西往往都是各自为政
  2. 好的政策真正实施起来可能面目全非
  3. 越是你认为没问题的地方,也许越是可能发现问题
  4. 框架设计者以为自己做的很好,能防止大部分问题出现,而往往疏忽大意,这正是机会!

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/827718
推荐阅读
相关标签
  

闽ICP备14008679号