C# influx 客户端中的 SQL 注入预防

Posted

技术标签:

【中文标题】C# influx 客户端中的 SQL 注入预防【英文标题】:SQL injection prevention in C# influx client 【发布时间】:2019-02-03 21:17:30 【问题描述】:

我正在尝试编写 Influx 查询并使用绑定参数来防止 SQL 注入。 Influx 文档讨论了 CURL 命令here,我看到了一个与他们的 Java 客户端相关的 GitHub 问题here

有人可以帮助我使用具有多个 [多个 WHERE 子句的 C# Influx 客户端来预防 SQL 注入。

我的查询:

SELECT * FROM "retentionPolicy.SystemGuid" WHERE time >= "startTime" AND time <= "endTime" AND Quality = "good"

【问题讨论】:

【参考方案1】:

为避免 sql 注入,您应该使用参数化查询。

怎么做?

您不应该将查询作为字符串参数传递,您应该将查询作为包含占位符和这些占位符的值的字符串参数传递

例如:

using (SqlConnection conn = new SqlConnection(DatabaseConnectionString))
    using (SqlCommand cmd = conn.CreateCommand())
    
      conn.Open();
      cmd.CommandText = "SELECT * FROM Users WHERE UserName = @UserName AND Password = @Password";
    cmd.Parameters.AddWithValue("@UserName", txtBoxUserName.Text);
    cmd.Parameters.AddWithValue("@Password", txtBoxPAssword.Text);
    cmd.ExecuteNonQuery();
    

【讨论】:

这不使用 Influx 客户端。 Influx 客户端中是否有任何内置功能可以做到这一点? 抱歉,我不了解 Influx,但我认为这是一般方法,您可以将其应用于您的案例。【参考方案2】:

我知道这是一个非常古老的主题,作者可能已经找到答案或继续前进。对于偶然发现这个问题的人-

InfluxDB 支持参数化查询。 此处记录了一个很好的示例 -

https://github.com/MikaelGRA/InfluxDB.Client

使用 InfluxDB 驱动程序的示例查询 -

var resultSet = await client.ReadAsync( D b, "SELECT * FROM myMeasurementName WHERE time >= $myParam", 新 myParam = new DateTime( 2010, 1, 1, 1, 1, 3, DateTimeKind.Utc ) );

【讨论】:

【参考方案3】:

SQL 注入通常不是 InfluxDB 的问题,因为它不支持 SQL。 InfluxDB 使用 InfluxQL,它是一种类似 SQL 的语言,但它不是 SQL。

【讨论】:

如果事实证明它受到密切反映 SQL 注入问题的“InfluxQL 注入”问题的影响,那并没有真正增加太多。只是意味着该术语的应用范围比严格阅读所暗示的要广泛,并不是说它不是一个有效的问题。 “InfluxQL 注入”会是什么样子?它不是 SQL 数据库。时间序列数据库用于完全不同的目的。我什至无法想象“InfluxQL 注入”会是什么样子,或者完成什么

以上是关于C# influx 客户端中的 SQL 注入预防的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入-预防

Laravel 预防 SQL 注入

Laravel 预防 SQL 注入

反 Sql 注入库 C# Asp.NET

MySqlBulkLoader SQL 注入预防

9.7预防sql注入