我使用XPath从XML检索值。由于以下原因,我的代码扫描程序会破坏构建:
调用使用未经验证的输入构建的XPath查询。这个电话可以 允许攻击者修改声明的含义或
这是我的代码:
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
是OMelement
,其中包含XML。属性来自XML属性。
如何避免XPathInjection?可以请分享一个代码段吗?
答案 0 :(得分:0)
您是从用户输入还是其他外部来源获取整个 XPath?
建议:不要将完整的XPath表达式作为不安全的源。 使用预编译的XPath。如果必须根据用户输入参数化XPath,请将基于用户的部分隔离到仅字符串参数,然后使用XPath库的参数化机制。
您正在使用基于Jaxen的Java和Axiom,因此请使用SimpleVariableContext和setVariableContext()进行XPath参数化。有关在使用Axiom时安全地参数化XPath的更多详细信息,请参阅Charles Duffy的回答here。