2013-03-11 75 views
2

我使用Gnome数据访问(libgda)来访问C程序中的数据库。 我使用GdaSqlBuilder来构建我的查询。 下面是一个字段添加同等条件的请求为例代码:Gnome的libgda和SQL注入

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?

在此先感谢您的答案。

回答

0

这在前言中说明:

当创建其中包含的值(文字)的SQL字符串,可以 动心(因为它是最简单的解决方案),以创建包含的值的字符串 他们自己执行该声明并在下次需要使用不同值执行相同语句 时应用相同的过程。这种方法存在两个主要缺陷 ,这就是为什么Libgda建议在语句 (也称为参数或占位符)中使用变量,并在只有变量的值发生更改时重复使用相同的 GdaStatement对象。

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

+0

感谢您的回答,但我仍然想知道如果使用GdaSqlBuilder与使用占位符来生成我的查询一样安全。我不使用任何文字,也不使用解析器来生成我的查询。 – aRs3nIc 2013-03-11 14:35:40

+0

根据手册['gda_sql_builder_get_statement'](https://developer.gnome.org/libgda/unstable/GdaSqlBuilder.html)返回一个'GdaStatement',只要没有文字值被传递,你就可以。检查返回的对象以验证参数是如何呈现的。 – 2013-03-11 14:41:52

-1

即使当前版本不存在漏洞,这并不意味着每个未来版本都不会受到攻击。您应该始终毫无例外地照顾用户提供的内容。

同样适用于来自其他任何类型系统的接口。这不仅限于SQLi,而不是SQLi或您使用的库的问题。您有责任让用户只能输入您希望他/她输入或拒绝的类别数据。你不能依靠其他代码来为你做。

一般来说:没有任何东西可以完全保护自己免受某种类型的攻击。它总是受限于撰写本文时已知的攻击者。

+0

这是一个有点太普通,没有真正解决了OP的具体问题是关于他/她是否需要消毒SQL传递给libgda。 – Kev 2013-03-11 14:42:58

+0

是的。因为你不需要这样做“如果”。我完全同意这个问题是否会是“如何”,“为什么”,“在哪里”,而不是“如果”。如果有人知道有像SQLi这样的东西,并且知道它会损害他/她的安全性,那么为什么世界上的人会不会对输入进行消毒? – 2013-03-11 14:47:48