nyx/tests/fixtures/xpath_injection/java/ParameterizedXpath.java
2026-05-07 01:29:31 -04:00

26 lines
1.1 KiB
Java

// Parameterised XPath: user input is bound via XPathVariableResolver
// (RFC-correct parameterisation) and the expression itself is a compile-time
// constant. Even with the variable-resolver call preceding the evaluate(),
// the expression argument is not taint-bearing, so no XPATH_INJECTION
// finding fires.
import javax.xml.namespace.QName;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
import javax.xml.xpath.XPathVariableResolver;
import javax.servlet.http.HttpServletRequest;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class ParameterizedXpath {
public NodeList lookup(HttpServletRequest req, Document doc) throws Exception {
final String user = req.getParameter("user");
XPath xpath = XPathFactory.newInstance().newXPath();
xpath.setXPathVariableResolver(new XPathVariableResolver() {
public Object resolveVariable(QName name) {
return user;
}
});
return (NodeList) xpath.evaluate("//user[name=$u]", doc, XPathConstants.NODESET);
}
}