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

2024-05-27

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

我们之前使用字符串连接来构建 XPATH 语句,但发现最终用户可以执行一些任意 XPATH。例如:

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

从输入字符串中删除单引号和双引号就足够了吗?

或者,.NET 框架是否支持参数化 XPATH 查询?


防止 XPath 注入的主要思想是预编译要使用的 XPath 表达式并允许其中包含变量(参数),这些变量在评估过程中将被用户输入的值替换.

In .NET:

  1. 预编译您的 XPath 表达式XPathExpression.Compile() http://msdn.microsoft.com/en-us/library/ms163317.aspx.

  2. Use the XPathExpression.SetContext() http://msdn.microsoft.com/en-us/library/0cs084hw.aspx Method指定为上下文Xslt上下文 http://msdn.microsoft.com/en-us/library/system.xml.xsl.xsltcontext.aspx将某些特定变量解析为用户输入的值的对象。

您可以阅读有关如何计算包含变量的 XPath 表达式的更多信息here http://msdn.microsoft.com/en-us/library/dd567715.aspx.

本文包含良好且完整的示例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何防止 .NET 中的 XPath/XML 注入 的相关文章

随机推荐