在Java中避免XPath注入攻击的最佳方法是什么?

时间:2015-05-21 02:30:04

标签: java xml security xpath

我使用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);

inputOMelement,其中包含XML。属性来自XML属性。

如何避免XPathInjection?可以请分享一个代码段吗?

1 个答案:

答案 0 :(得分:0)

您是从用户输入还是其他外部来源获取整个 XPath?

建议:不要将完整的XPath表达式作为不安全的源。 使用预编译的XPath。如果必须根据用户输入参数化XPath,请将基于用户的部分隔离到仅字符串参数,然后使用XPath库的参数化机制。

您正在使用基于Jaxen的Java和Axiom,因此请使用SimpleVariableContextsetVariableContext()进行XPath参数化。有关在使用Axiom时安全地参数化XPath的更多详细信息,请参阅Charles Duffy的回答here