【问题标题】:Preventing SQL injection in C++ OTL, DTL, or SOCI libraries防止 C++ OTL、DTL 或 SOCI 库中的 SQL 注入
【发布时间】:2011-03-08 07:32:59
【问题描述】:

我一直在查看所有这三个数据库库,我想知道它们是否会采取任何措施来防止 SQL 注入。我很可能会在其中一个之上构建一个库,而注入是我选择一个库时最关心的问题。有人知道吗?

【问题讨论】:

    标签: c++ database sql-injection soci otl


    【解决方案1】:

    一般来说,这个级别的库应该按照您的指示去做。您最能防止 SQL 注入的方法是查看用户提供的字符串,并且仅在对它们进行清理后才将它们传递给库。

    【讨论】:

    • 嗯,我知道总是清理输入以防止注入是很好的,但我不确定这些库中的任何一种方式,至于它们是否使用引擎盖下的参数,或者如果他们基本上只是将我传入的变量转换为字符串并将它们组合起来,或者他们可能会将我的查询转换为参数化版本。也许我只是错过了每个文档中的某些内容,但到目前为止我还没有看到任何类似的内容。
    • 检查字符串不足以防止 SQL 注入
    【解决方案2】:

    与 OTL 库的作者联系。用“OTL 方言”编写的参数化查询,正如我所说的,作为参数化查询传递给底层 DB API。因此,参数化查询将与底层 API 一样具有注入安全性。

    转到 this 其他 SO 帖子以获取他的完整电子邮件解释: Is C++ OTL SQL database library using parameterized queries under the hood, or string concat?

    编辑:SOCI 使用soci::use 表达式,它转换为通常的绑定机制,但具有更多语法糖。示例:db_session << "insert into table(column) values(:value_placeholder)", use(user_input,"value_placeholder");

    就 DTL 而言,我不确定它如何处理与底层 API 相关的参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 2012-11-23
      • 1970-01-01
      相关资源
      最近更新 更多