.net 过滤器中的类SQL注入

.net 过滤器中的类SQL注入,.net,azure-cognitive-search,azure-search-.net-sdk,.net,Azure Cognitive Search,Azure Search .net Sdk,我正在构建这个方法,它允许构建SearchParameters对象。其中一种方法允许指定此对象的过滤器字段。它看起来像这样(简化版) 所以我可以这样使用它 var searchParameters = this.CreateWithFilter("manufacturer", "eq", "volvo"); 现在的问题是,这段代码像sql注入一样易受攻击。如果我打电话 var searchParameters = this.CreateWithFilter("manufacturer", "e

我正在构建这个方法,它允许构建
SearchParameters
对象。其中一种方法允许指定此对象的
过滤器
字段。它看起来像这样(简化版)

所以我可以这样使用它

var searchParameters = this.CreateWithFilter("manufacturer", "eq", "volvo");
现在的问题是,这段代码像sql注入一样易受攻击。如果我打电话

var searchParameters = this.CreateWithFilter("manufacturer", "eq", "volvo' or someField eq 1 or manufacturer eq 'volvo");
我将成为一名伟大的Azure搜索黑客;)

我的问题:


Azure Search中是否有与SQL world中已知的类似的特定技术,允许我针对这些类型的注入保护代码?

很好,如果您从外部/不受信任的源获取字符串,则使用这些创建查询字符串永远都不安全

在SQL中,建议尽可能使用参数化查询(例如,从表中选择*,其中字段>@param)。不幸的是,Azure Search在这样的查询中没有参数

Azure搜索的另一种方法是小心地转义启用注入的特殊字符。一个简单的起点是:

  • 对于字符串字段,请转义单引号(重复引号)
  • 对于数字、布尔值和日期,完全解析文本(例如使用int.parse、float.parse、bool.parse等),并在将其添加到筛选器之前将其重新转换为字符串。这不仅有助于注入,还允许您以不同于OData假定的语言环境和格式(例如“,”vs“,”作为十进制分隔符、日期格式等)进行输入
  • var searchParameters = this.CreateWithFilter("manufacturer", "eq", "volvo' or someField eq 1 or manufacturer eq 'volvo");