Dot-Net
如何防止 .NET 中的 XPath/XML 注入
如何防止 .NET Framework 中的 XPATH 注入?
我們之前使用字元串連接來建構 XPATH 語句,但發現最終使用者可以執行一些任意 XPATH。例如:
string queryValue = "pages[@url='" + USER_INPUT_VALUE + "']"; node = doc.DocumentElement.SelectSingleNode(queryValue);從輸入字元串中去掉單引號和雙引號就足夠了嗎?
或者,.NET 框架是否支持參數化 XPATH 查詢?
防止 XPath 注入的主要思想是預編譯您想要使用的 XPath 表達式並允許其中的變數(參數),在評估過程中這些變數將被使用者輸入的值替換。
在 .NET 中:
- **使用XPathExpression.Compile()**預編譯您的 XPath 表達式。
- 使用**XPathExpression.SetContext()方法將****XsltContext**對象指定為上下文,該對象將某些特定變數解析為使用者輸入的值。
**您可以在此處**閱讀有關如何計算包含變數的 XPath 表達式的更多資訊。
這篇文章包含了很好和完整的例子。