我正在使用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之前自行清理输入?
提前感谢您的回答。
答案 0 :(得分:0)
前言中解释了这一点:
创建包含值(文字)的SQL字符串时,可以 被诱惑(因为这是最简单的解决方案)来创建一个字符串 包含值本身,执行该语句并应用 下次需要执行相同的语句时,进程相同 有不同的价值观。这种方法有两个主要缺陷 下面是Libgda建议在语句中使用变量的原因 (也称为参数或占位符)并重复使用它们 仅当变量的值发生变化时的GdaStatement对象。
答案 1 :(得分:-1)
即使当前版本不易受攻击,但这并不意味着每个未来版本都不会受到攻击。除了用户提供的内容之外,您应始终无任何例外。
同样适用于任何类型的其他系统的接口。这不仅限于SQLi,也不是SQLi或您使用的库的问题。您有责任确定用户只能输入您希望他/她输入的种类数据,否则拒绝。你不能依赖其他代码来为你做这件事。
通常:没有什么可以完全保护自己免受某种类型的攻击。它始终仅限于撰写本文时已知的攻击向量。