mirror of
https://github.com/elicpeter/nyx.git
synced 2026-06-09 19:45:13 +02:00
26 lines
1.1 KiB
Java
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);
|
|
}
|
|
}
|