ホームページ >データベース >mysql チュートリアル >mysql_real_escape_string() は SQL インジェクションの防止において本当に信頼できますか?
クエリを保護するために mysql_real_escape_string() に頼ることはできますか?
適切に使用されているにもかかわらず、mysql_real_escape_string() の信頼性に関して懸念が提起されています。 ) SQL インジェクションから保護します。この問題を明らかにするために、関数の制限とカスタムプリペアドステートメントの作成への適合性を詳しく調べてみましょう。
コードと分析の証明:
公式 MySQL によるとドキュメントによると、mysql_real_escape_string() の関数は接続の文字セットの影響を受けます。最適なパフォーマンスを確保するには、SET NAMES または SET CHARACTER SET ステートメントではなく mysql_set_character_set() を使用して文字セットを変更することをお勧めします。
#include <mysql/mysql.h> int main() { // Create a MySQL connection MYSQL *conn = mysql_init(NULL); // Set the character set to UTF-8 using mysql_set_character_set() mysql_set_charset(conn, "utf8", MY_CS_PRIMARY); // Prepare a query using mysql_real_escape_string() char *query = mysql_real_escape_string(conn, "SELECT * FROM users"); // Execute the query mysql_query(conn, query); // Release memory free(query); mysql_close(conn); return 0; }
このコードでは、次を使用して文字セットを明示的に UTF-8 に設定します。 mysql_set_character_set()、mysql_real_escape_string() が正しいもので使用されていることを確認します。 encoding.
結論:
特定の制限が存在する可能性がありますが、mysql_real_escape_string() を使用して基本的なプリペアド ステートメントを作成することはできます。 mysql_set_character_set() を使用して適切な文字セットが定義されていることを確認することで、SQL インジェクションに対して必要なレベルのセキュリティを維持できます。
以上がmysql_real_escape_string() は SQL インジェクションの防止において本当に信頼できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。