mysql_real_escape_string() には修正できない欠陥がありますか?
一部の懐疑論者は、mysql_real_escape_string() 関数には根本的な欠陥があり、SQL クエリを確実に保護できないと主張しています。 。彼らは証拠として古い記事を指摘しています。
カスタムプリペアドステートメントに使用できますか?
これらの懸念にもかかわらず、mysql_real_escape_string() を利用して作成することは依然として可能です。カスタムの準備済みステートメント。ただし、文字セットの処理には細心の注意が必要です。
解決策:
mysql_real_escape_string() の MySQL C API ドキュメントによると、mysql_set_character_set() を使用して設定する必要があります。文字セット。これにより、mysql_real_escape_string().
コード例:
#includeint main() { MYSQL *conn = mysql_init(NULL); mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0); // Change the encoding using mysql_set_charset() mysql_set_charset(conn, "utf8"); // Create a custom prepared statement using mysql_real_escape_string() char query[1024]; mysql_real_escape_string(conn, query, "SELECT * FROM users WHERE username='test'", sizeof(query)); // Execute the query mysql_query(conn, query); mysql_close(conn); return 0; }
このアプローチに従い、SET NAMES/SET CHARACTER SET を回避することで、mysql_real_escape_string() を効果的に利用して SQL クエリをインジェクションから保護できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3