2011-12-18 157 views
1

我必须保护我的软件免受SQL注入。如何使用预准备语句防止C语言中的SQL注入?

这里是我的C代码的例子:

char myquery[QUERY_LEN]; 
sprintf(myquery, "select * from patient p where p.id_doc='%s'", us_names[index].name); 

if (mysql_query(conn, myquery)) { 
    fprintf(stderr, "%s\n", mysql_error(conn)); 
    exit(1); 
} 

我想用事先准备好的声明,因为我读的是最好的解决办法,但我不明白它是如何工作的。

我用谷歌,但我没有发现C.

你能不能让我与我的代码示例,任何的例子吗?

+4

你阅读手册? http://dev.mysql.com/doc/refman/5.0/en/c.html(第19.8.4节开始)。 – 2011-12-18 14:33:02

+4

MySQL手册有一个例子:http://dev.mysql.com/doc/refman/5.6/en/mysql-stmt-execute.html – pmg 2011-12-18 14:35:57

+3

使用占位符;不要直接在SQL中包含字符串。如果您必须使用适当的功能来转义需要转义的字符。请注意,在C中,您需要关心缓冲区溢出(以及SQL注入)。所以,你应该使用'snprintf()'并且检查结果是否意味着'没有发生溢出'。 – 2011-12-18 17:45:00

回答

4

欢迎来到SO。您不会找到您的代码的完整示例。只是一般的例子。如果你想了解更多关于预防代码注入的信息,那么谷歌的话题,而不是你的具体问题。

有些文章:

+1

好的,谢谢!我在这里找到解决方案http://dev.mysql.com/doc/refman/5.6/en/mysql-stmt-execute.html – 2011-12-26 09:41:04

相关问题