[英]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,因此使用SimpleVariableContext和setVariableContext()进行 XPath 参数化。 见查尔斯·达菲的答案在这里使用公理时,详细了解安全参数化的XPath。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.