【问题标题】:SQL injection prevention in C# influx clientC# influx 客户端中的 SQL 注入预防
【发布时间】: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"

【问题讨论】:

    标签: c# sql-injection influxdb


    【解决方案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 注入”会是什么样子,或者完成什么
      猜你喜欢
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      • 2017-12-17
      • 2012-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多