我正在使用 XPath 从 XML 中检索值。由于以下原因,我的代码扫描器破坏了构建:
invokes an XPath query built using unvalidated input. This call could allow an attacker to modify the statement's meaning or to
这是我的代码:
private String myMethod(String XPath, OMElement input) {
String elementText = null;
AXIOMXPath xpathToElement = null;
try {
xpathToElement = new AXIOMXPath(XPath);
xpathToElement.addNamespace(xxx,yyy);
elementText = ((OMElement) xpathToElementnode.selectSingleNode(input)).getText();
} catch (JaxenException e) {
e.printStackTrace();
fail(e.getMessage());
...
这是我调用上述方法的代码:
key = myMethod(myAttribute.getAttributeValue(), input);
input
是包含 XML 的 OMelement
。属性是从 XML 属性中获取的。
如何避免 XPathInjection?可以分享一个代码片段吗?
最佳答案
您要从用户输入或其他外部来源获取完整 XPath?
建议:不要将完整的 XPath 表达式作为不安全的来源。使用预编译的 XPath。如果必须根据用户输入参数化 XPath,请将基于用户的部分隔离为仅字符串参数,然后使用 XPath 库的参数化机制。
您正在使用基于 Jaxen 的 Java 和 Axiom,因此请使用 SimpleVariableContext和 setVariableContext()用于 XPath 参数化。请参阅查尔斯·达菲的回答 here有关使用 Axiom 时安全地参数化 XPath 的更多详细信息。
关于java - 在 Java 中避免 XPath 注入(inject)攻击的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30363567/