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

2019-05-12 03:40发布

如何防止XPath注入在.NET Framework?

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

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

难道是足以从输入字符串去掉单引号和双引号?

或者,做了.NET框架的支持参数的XPath查询?

Answer 1:

在防止XPath注入的主要思想是预编译要使用,并允许变量(参数)在它,这在评价过程中将由用户输入的值被取代的XPath表达式

在.NET中

  1. 有你的XPath expresion预编译XPathExpression.Compile() 。

  2. 使用XPathExpression.SetContext()方法来指定一个作为背景XsltContext解析为用户输入的值某些特定变量的对象。

你可以阅读更多有关如何评估包含变量XPath表达式这里

本文所包含的良好而完整的例子。



Answer 2:

如果你使用一个完全成熟的强类型的参数可用XsltTransform 。



Answer 3:

如果你使用撒克逊作为你的XPath处理器参数XPath是可能的。



Answer 4:

相反,强类型的参数,你可以减少对用户的选项。 为什么给他们完全的控制,如果你不希望出现这种情况?

提供了几个选项的用户,从选择,然后创建查询。

允许用户输入任意字符串是自找麻烦还是有很多的工作。



文章来源: How to prevent XPath/XML injection in .NET