1- import org .w3c .dom .Document ;
2- import org .xml .sax .InputSource ;
3- import org .xml .sax .SAXException ;
1+ import java .io .ByteArrayInputStream ;
2+ import java .io .StringReader ;
43
4+ import javax .servlet .http .HttpServletRequest ;
55import javax .xml .parsers .DocumentBuilder ;
66import javax .xml .parsers .DocumentBuilderFactory ;
7- import javax .xml .parsers .ParserConfigurationException ;
87import javax .xml .xpath .XPath ;
98import javax .xml .xpath .XPathConstants ;
109import javax .xml .xpath .XPathExpression ;
11- import javax .xml .xpath .XPathExpressionException ;
1210import javax .xml .xpath .XPathFactory ;
1311
14- import java .io .BufferedInputStream ;
15- import java .io .ByteArrayInputStream ;
16- import java .io .InputStream ;
17- import java .io .StringReader ;
18-
19- import javax .servlet .http .HttpServletRequest ;
12+ import org .w3c .dom .Document ;
13+ import org .xml .sax .InputSource ;
2014
2115public class A {
2216 public void handle (HttpServletRequest request ) throws Exception {
@@ -34,17 +28,13 @@ public void handle(HttpServletRequest request) throws Exception {
3428 String user = request .getParameter ("user" );
3529 String pass = request .getParameter ("pass" );
3630 if (user != null && pass != null ) {
37- boolean isExist = false ;
38-
3931 // Bad expression
4032 String expression1 = "/users/user[@name='" + user + "' and @pass='" + pass + "']" ;
41- isExist = (boolean ) xpath .evaluate (expression1 , doc , XPathConstants .BOOLEAN ); // $hasXPathInjection
42- System .out .println (isExist );
33+ xpath .evaluate (expression1 , doc , XPathConstants .BOOLEAN ); // $hasXPathInjection
4334
4435 // Bad expression
4536 XPathExpression expression2 = xpath .compile ("/users/user[@name='" + user + "' and @pass='" + pass + "']" ); // $hasXPathInjection
46- isExist = (boolean ) expression2 .evaluate (doc , XPathConstants .BOOLEAN );
47- System .out .println (isExist );
37+ expression2 .evaluate (doc , XPathConstants .BOOLEAN );
4838
4939 // Bad expression
5040 StringBuffer sb = new StringBuffer ("/users/user[@name=" );
@@ -54,8 +44,7 @@ public void handle(HttpServletRequest request) throws Exception {
5444 sb .append ("']" );
5545 String query = sb .toString ();
5646 XPathExpression expression3 = xpath .compile (query ); // $hasXPathInjection
57- isExist = (boolean ) expression3 .evaluate (doc , XPathConstants .BOOLEAN );
58- System .out .println (isExist );
47+ expression3 .evaluate (doc , XPathConstants .BOOLEAN );
5948
6049 // Good expression
6150 String expression4 = "/users/user[@name=$user and @pass=$pass]" ;
@@ -69,13 +58,12 @@ public void handle(HttpServletRequest request) throws Exception {
6958 throw new IllegalArgumentException ();
7059 }
7160 });
72- isExist = (boolean ) xpath .evaluate (expression4 , doc , XPathConstants .BOOLEAN );
73- System .out .println (isExist );
61+ xpath .evaluate (expression4 , doc , XPathConstants .BOOLEAN ); // Safe
7462
7563 // Bad Dom4j
7664 org .dom4j .io .SAXReader reader = new org .dom4j .io .SAXReader ();
7765 org .dom4j .Document document = reader .read (new ByteArrayInputStream (xmlStr .getBytes ()));
78- isExist = document .selectSingleNode ("/users/user[@name='" + user + "' and @pass='" + pass + "']" ) // $hasXPathInjection
66+ document .selectSingleNode ("/users/user[@name='" + user + "' and @pass='" + pass + "']" ) // $hasXPathInjection
7967 .hasContent ();
8068 document .selectNodes ("/users/user[@name='" + user + "' and @pass='" + pass + "']" ); // $hasXPathInjection
8169 }
0 commit comments