2

我正在使用 Gnome 数据访问 (libgda) 来访问 C 程序中的数据库。我使用 GdaSqlBuilder 来构建我的查询。以下是在请求字段上添加相等条件的示例代码:

GdaSqlBuilderId add_equal_condition(char* m_name, GValue* m_value)
{
    GdaSqlBuilderId name, value, condition;
    name = gda_sql_builder_add_id(builder, m_name);
    value = gda_sql_builder_add_expr_value(builder, NULL, m_value);
    condition = gda_sql_builder_add_cond(builder, GDA_SQL_OPERATOR_TYPE_EQUAL, name, value, 0);
    return condition;
}

libgda 是否可以保护自己免受 SQL 注入的影响,或者我是否需要在将输入传递给 GDA 之前自己对其进行清理?

提前感谢您的回答。

4

2 回答 2

0

这在前言中有解释:

在创建包含值(文字)的 SQL 字符串时,可能会被诱惑(因为这是最简单的解决方案)创建一个包含值本身的字符串,执行该语句并在下一次需要相同的语句时应用相同的过程以不同的值执行。这种方法有以下两个主要缺陷,这就是为什么 Libgda 建议在语句中使用变量(也称为参数或占位符)并在仅变量值更改时重用相同的 GdaStatement 对象。

https://developer.gnome.org/libgda/unstable/ch06s03.html

于 2013-03-11T14:26:28.253 回答
-1

即使当前版本不存在漏洞,但这并不意味着未来的每个版本都不会存在漏洞。您应该始终无一例外地关注用户提供的内容。

来自任何其他系统的接口也是如此。这不仅限于 SQLi,也不是 SQLi 或您使用的库的问题。您有责任让用户只能输入您希望他/她输入或拒绝的类型数据。您不能依赖其他代码为您执行此操作。

一般来说:没有什么可以完全保护自己免受某种类型的攻击。它将始终限于撰写本文时已知的攻击向量。

于 2013-03-11T14:21:06.337 回答