Dot-Net

如何防止 .NET 中的 XPath/XML 注入

  • June 20, 2011

如何防止 .NET Framework 中的 XPATH 注入?

我們之前使用字元串連接來建構 XPATH 語句,但發現最終使用者可以執行一些任意 XPATH。例如:

string queryValue = "pages[@url='" + USER_INPUT_VALUE + "']";
node = doc.DocumentElement.SelectSingleNode(queryValue);

從輸入字元串中去掉單引號和雙引號就足夠了嗎?

或者,.NET 框架是否支持參數化 XPATH 查詢?

防止 XPath 注入的主要思想是預編譯您想要使用的 XPath 表達式並允許其中的變數(參數),在評估過程中這些變數將被使用者輸入的值替換

在 .NET 中

  1. **使用XPathExpression.Compile()**預編譯您的 XPath 表達式。
  2. 使用**XPathExpression.SetContext()方法將****XsltContext**對象指定為上下文,該對象將某些特定變數解析為使用者輸入的值。

**您可以在此處**閱讀有關如何計算包含變數的 XPath 表達式的更多資訊。

這篇文章包含了很好和完整的例子。

引用自:https://stackoverflow.com/questions/6381689