Skip to content

Commit 8ec61d1

Browse files
committed
binarywang#903 disable DOCTYPE to fix XXE Vulnerability
1 parent d6923f2 commit 8ec61d1

File tree

4 files changed

+8
-1
lines changed

4 files changed

+8
-1
lines changed

weixin-java-common/src/main/java/me/chanjar/weixin/common/util/crypto/WxCryptUtil.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ protected DocumentBuilder initialValue() {
3939
try {
4040
final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
4141
factory.setExpandEntityReferences(false);
42+
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
4243
return factory.newDocumentBuilder();
4344
} catch (ParserConfigurationException exc) {
4445
throw new IllegalArgumentException(exc);

weixin-java-common/src/test/java/me/chanjar/weixin/common/util/crypto/WxCryptUtilTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public void testNormal() throws ParserConfigurationException, SAXException, IOEx
4040

4141
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
4242
documentBuilderFactory.setExpandEntityReferences(false);
43+
documentBuilderFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
4344
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
4445
Document document = documentBuilder.parse(new InputSource(new StringReader(encryptedXml)));
4546

@@ -83,6 +84,8 @@ public void testValidateSignatureError() throws ParserConfigurationException, SA
8384
String afterEncrpt = pc.encrypt(this.replyMsg);
8485
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
8586
dbf.setExpandEntityReferences(false);
87+
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
88+
8689
DocumentBuilder db = dbf.newDocumentBuilder();
8790
StringReader sr = new StringReader(afterEncrpt);
8891
InputSource is = new InputSource(sr);

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/BaseWxPayResult.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ private Document getXmlDoc() {
189189
try {
190190
final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
191191
factory.setExpandEntityReferences(false);
192+
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
192193
this.xmlDoc = factory.newDocumentBuilder()
193194
.parse(new ByteArrayInputStream(this.xmlString.getBytes(StandardCharsets.UTF_8)));
194195
return xmlDoc;

weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/result/BaseWxPayResultTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,9 @@ public void testToMap() throws Exception {
7575
@Test(expectedExceptions = {RuntimeException.class})
7676
public void testToMap_with_empty_xmlString() {
7777
WxPayOrderQueryResult result = new WxPayOrderQueryResult();
78-
result.setXmlString(" ");
78+
result.setXmlString( "<?xml version=\"1.0\" ?><!DOCTYPE doc " +
79+
"[<!ENTITY win SYSTEM \"file:///C:/Users/user/Documents/testdata2.txt\">]" +
80+
"><doc>&win;</doc>");
7981
Map<String, String> map = result.toMap();
8082
System.out.println(map);
8183
}

0 commit comments

Comments
 (0)