Maison >base de données >tutoriel mysql >mysql_real_escape_string() est-il vraiment fiable pour empêcher l'injection SQL ?
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!