2011-12-18 42 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

相關問題