Gnome的libgda和SQL注入

时间:2013-03-11 14:02:14

标签: sql c code-injection gnome

我正在使用Gnome Data Access(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之前自行清理输入?

提前感谢您的回答。

2 个答案:

答案 0 :(得分:0)

前言中解释了这一点:

  

创建包含值(文字)的SQL字符串时,可以   被诱惑(因为这是最简单的解决方案)来创建一个字符串   包含值本身,执行该语句并应用   下次需要执行相同的语句时,进程相同   有不同的价值观。这种方法有两个主要缺陷   下面是Libgda建议在语句中使用变量的原因   (也称为参数或占位符)并重复使用它们   仅当变量的值发生变化时的GdaStatement对象。

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

答案 1 :(得分:-1)

即使当前版本不易受攻击,但这并不意味着每个未来版本都不会受到攻击。除了用户提供的内容之外,您应始终无任何例外。

同样适用于任何类型的其他系统的接口。这不仅限于SQLi,也不是SQLi或您使用的库的问题。您有责任确定用户只能输入您希望他/她输入的种类数据,否则拒绝。你不能依赖其他代码来为你做这件事。

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