漏洞等級:高危
漏洞型別:XML實體注入
漏洞描述:XXE漏洞全稱XML Extemal Endy niecionlxm以外部實體注入漏洞,X在漏洞發生在應用程式經析XML輸入時,沒有禁止外部實體的載入,導致可載入惡意外部檔案,造成檔案讀取、命令執行、內網埠掃描、攻擊內網網站、發起d0s攻擊等危害。xxe漏洞觸發的點往往是可以上傳xm檔案的位置,沒有對上傳的xm,檔案進行過濾,導致可上傳惡意xm檔案。
具體修復方案:
1.需要將poi jar包升級到4.1.2版本,我當前使用的版本是3.16。
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> <exclusions> <exclusion> <groupId>org.apache.xmlbeans</groupId> <artifactId>xmlbeans</artifactId> </exclusion> </exclusions> </dependency>
2.升級完jar包後程式碼中引入的需要相關方法及屬性就會報錯,這時候需要我們手動調整這些錯誤。
以下是3.6及以下的版本顯示:
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cellStyle.setBottomBorderColor(HSSFColor.BLACK.index);
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cellStyle.setLeftBorderColor(HSSFColor.BLACK.index);
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
更高版本是這樣的:
cellStyle.setAlignment(HorizontalAlignment.CENTER);
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyle.setBorderBottom(BorderStyle.THIN);
cellStyle.setBottomBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
cellStyle.setBorderLeft(BorderStyle.THIN);
cellStyle.setLeftBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
cellStyle.setBorderRight(BorderStyle.THIN);
cellStyle.setRightBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
cellStyle.setBorderTop(BorderStyle.THIN);
cellStyle.setTopBorderColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
3.調整完成後可以啟動成功,但是上傳檔案依然會報錯,錯誤資訊如下:
Handler processing failed; nested exception is java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlOptions.setEntityExpansionLimit(I)Lorg/apache/xmlbeans/XmlOptions;
這時候就需要我們手動排除poi裡的xmbeans,重新 引入xmbeans,注意:xmlbeans只能引入一個,不要存在其他版本的xmlbeans,不然依然會報錯。
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> <exclusions> <exclusion> <groupId>org.apache.xmlbeans</groupId> <artifactId>xmlbeans</artifactId> </exclusion> </exclusions> </dependency>
<!-- xmlbeans -->
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>3.1.0</version>
</dependency>
注意:不是pom.xml只引入一個版本就行了,是引用的Maven倉庫中只能存在一個版本的xmlbeans。