java - 在 Java 中避免 XPath 注入(inject)攻击的最佳方法是什么?

标签 java xml security xpath

我正在使用 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,因此请使用 SimpleVariableContextsetVariableContext()用于 XPath 参数化。请参阅查尔斯·达菲的回答 here有关使用 Axiom 时安全地参数化 XPath 的更多详细信息。

关于java - 在 Java 中避免 XPath 注入(inject)攻击的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30363567/

相关文章:

java - Android 应用程序 ListView 启动太慢

java - 从java中的XML文件中删除元素

java - PMD 的 Eclipse 重复注释 @SurpressWarnings

python - 如何读取xml文件的一些内容并将其写入文本文件?

security - 刷新 token 和 JWT token 交互

javascript - 通过 javascript 和本地存储具有明显安全性的 Web 应用程序

security - 如何解码哈希

java - 用于 Java 的 TFS - 坏主意?

使用 XSLT 将 XML 转换为 CSV

java - 尝试让 Cherokee Alphabet 显示在 Android Studio 中