繁体   English   中英

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

[英]What is the best way to avoid XPath Injection attack in Java?

我正在使用 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是包含 XML 的OMelement 属性是从 XML 属性获取的。

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

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

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

您正在使用 Java 和基于 Jaxen 的 Axiom,因此使用SimpleVariableContextsetVariableContext()进行 XPath 参数化。 见查尔斯·达菲的答案在这里使用公理时,详细了解安全参数化的XPath。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM