2011-12-18 1 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以降)。 –

+4

MySQLマニュアルには例があります:http://dev.mysql.com/doc/refman/5.6/en/mysql-stmt-execute.html – pmg

+3

プレースホルダを使用してください。 SQLに直接文字列を含めないでください。必要な場合は、適切な関数を使用してエスケープする必要のある文字をエスケープします。 Cでは、バッファオーバーフロー(SQLインジェクションだけでなく)について心配する必要があることに注意してください。ですから、おそらく 'snprintf()'を使って、結果が 'オーバーフローが発生していません'ということを確認する必要があります。 –

答えて

4

ようこそ。 コードの完全な例は見つかりません。ちょうど一般的な例。コードインジェクションの防止について詳しく知りたい場合は、そのトピックのGoogleを参照してください。具体的な問題はありません。

いくつかの記事:

+1

ありがとうございました!!!私はここで解決策を見つけるhttp://dev.mysql.com/doc/refman/5.6/en/mysql-stmt-execute.html –

関連する問題