Maison >base de données >tutoriel mysql >mysql_real_escape_string() est-il vraiment fiable pour empêcher l'injection SQL ?

mysql_real_escape_string() est-il vraiment fiable pour empêcher l'injection SQL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-04 15:04:11755parcourir

Is mysql_real_escape_string() Truly Reliable for Preventing SQL Injection?

Pouvez-vous compter sur mysql_real_escape_string() pour protéger vos requêtes ?

Malgré une utilisation appropriée, des inquiétudes ont été soulevées concernant la fiabilité de mysql_real_escape_string( ) pour vous protéger contre les injections SQL. Pour faire la lumière sur ce problème, examinons les limites de la fonction et son adéquation à la création d'instructions préparées personnalisées.

Code de preuve et analyse :

Selon le MySQL officiel documentation, la fonction de mysql_real_escape_string() est affectée par le jeu de caractères de la connexion. Pour garantir des performances optimales, il suggère d'utiliser mysql_set_character_set() plutôt que les instructions SET NAMES ou SET CHARACTER SET pour modifier le jeu de caractères.

#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;
}

Dans ce code, nous définissons explicitement le jeu de caractères sur UTF-8 en utilisant mysql_set_character_set(), en s'assurant que mysql_real_escape_string() est utilisé avec le bon encodage.

Conclusion :

Bien que certaines limitations puissent exister, mysql_real_escape_string() peut toujours être utilisé pour créer des instructions préparées rudimentaires. En vous assurant que le jeu de caractères approprié est défini à l'aide de mysql_set_character_set(), vous pouvez maintenir le niveau de sécurité souhaité contre les injections SQL.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn