ホームページ >データベース >mysql チュートリアル >mysql_real_escape_string() は SQL インジェクションの防止において本当に信頼できますか?

mysql_real_escape_string() は SQL インジェクションの防止において本当に信頼できますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-04 15:04:11741ブラウズ

Is mysql_real_escape_string() Truly Reliable for Preventing SQL Injection?

クエリを保護するために 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。