簡體   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