Skip to content

Commit 66680e9

Browse files
committed
🔒️ Enhance XML security
1 parent ba8cecc commit 66680e9

File tree

6 files changed

+36
-11
lines changed

6 files changed

+36
-11
lines changed

.dockerignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
**/.DS_Store
2+
**/LICENSE
3+
**/*.md

Dockerfile

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
FROM eclipse-temurin:21-alpine
22

3+
RUN adduser -H -D xrviz xrviz
4+
USER xrviz
5+
36
WORKDIR /app
47

5-
COPY build/libs/xrviz.jar /app/xrviz.jar
6-
COPY data /app/data
8+
COPY --chown=xrviz:xrviz build/libs/xrviz.jar /app/xrviz.jar
9+
COPY --chown=xrviz:xrviz data /app/data
710

811
EXPOSE 4000
912

10-
CMD ["java", "-jar", "/app/xrviz.jar"]
13+
CMD ["java", "-jar", "xrviz.jar"]

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
currentVersion=0.1.10
1+
currentVersion=0.1.11
22
mainClassName=io.github.easybill.xrviz.App

src/main/java/io/github/easybill/xrviz/XslTransformer.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
import org.apache.fop.apps.*;
44
import org.xml.sax.InputSource;
55
import org.xml.sax.SAXException;
6+
import org.xml.sax.XMLReader;
67

7-
import javax.xml.transform.Source;
8+
import javax.xml.parsers.SAXParser;
9+
import javax.xml.parsers.SAXParserFactory;
810
import javax.xml.transform.Transformer;
911
import javax.xml.transform.TransformerException;
1012
import javax.xml.transform.TransformerFactory;
@@ -30,6 +32,22 @@ public class XslTransformer {
3032
public static final String UBL_I_VALIDATION_STRING = "Invoice";
3133
public static final String UBL_C_VALIDATION_STRING = "CreditNote";
3234
public static final Pattern REGEX = Pattern.compile("[<:](CrossIndustryInvoice|Invoice|CreditNote)");
35+
private static final XMLReader xmlReader;
36+
37+
static {
38+
try {
39+
SAXParserFactory factory = SAXParserFactory.newInstance();
40+
SAXParser saxParser = factory.newSAXParser();
41+
xmlReader = saxParser.getXMLReader();
42+
xmlReader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
43+
xmlReader.setFeature("http://xml.org/sax/features/external-general-entities", false);
44+
xmlReader.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
45+
} catch (Exception e) {
46+
logger.log(Level.SEVERE, "Error initializing XMLReader", e);
47+
throw new RuntimeException(e);
48+
}
49+
}
50+
3351

3452
enum DocumentType {
3553
CII("cii-xr.xsl"),
@@ -91,9 +109,9 @@ private static DOMSource transformXmlToXr(String inputXml, DocumentType type) th
91109
TransformerFactory factory = TransformerFactory.newInstance();
92110
StreamSource source = new StreamSource("data/xsl/" + type.getXslName());
93111
Transformer transformer = factory.newTransformer(source);
94-
Source xml = new StreamSource(new StringReader(inputXml));
112+
SAXSource saxSource = new SAXSource(xmlReader, new InputSource(new StringReader(inputXml)));
95113
DOMResult domResult = new DOMResult();
96-
transformer.transform(xml, domResult);
114+
transformer.transform(saxSource, domResult);
97115
return new DOMSource(domResult.getNode());
98116
}
99117

src/main/java/io/github/easybill/xrviz/handler/HtmlHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import javax.xml.transform.TransformerException;
88
import java.io.IOException;
9+
import java.net.HttpURLConnection;
910
import java.nio.charset.StandardCharsets;
1011

1112
public class HtmlHandler extends XmlRequestExtractor implements HttpHandler {
@@ -27,7 +28,7 @@ public void handle(HttpExchange exchange) throws IOException {
2728
exchange.getResponseBody().close();
2829

2930
} catch (TransformerException e) {
30-
exchange.sendResponseHeaders(500, -1);
31+
exchange.sendResponseHeaders(HttpURLConnection.HTTP_BAD_REQUEST, -1);
3132

3233
logger.severe("Error while transforming XML to HTML: " + e.getMessage());
3334
}

version-badge.svg

Lines changed: 3 additions & 3 deletions
Loading

0 commit comments

Comments
 (0)