Maison >base de données >tutoriel mysql >Comment empêcher l'injection MySQL avec les instructions préparées PDO : existe-t-il un équivalent PDO à `mysql_real_escape_string()` ?

Comment empêcher l'injection MySQL avec les instructions préparées PDO : existe-t-il un équivalent PDO à `mysql_real_escape_string()` ?

DDD
DDDoriginal
2024-10-26 07:58:031005parcourir

How to Prevent MySQL Injection with PDO Prepared Statements: Is There a PDO Equivalent to `mysql_real_escape_string()`?

Équivalent PDO de mysql_real_escape_string()

Dans votre migration de code de mysql_* vers PDO, vous recherchez un équivalent pour mysql_real_escape_string(). Cependant, il est crucial de noter qu'il n'existe pas d'équivalent direct dans PDO.

Techniquement, PDO::quote() existe, mais il n'est pas couramment utilisé et n'est pas comparable à mysql_real_escape_string().

Prévention appropriée des injections MySQL

Lorsque vous utilisez PDO de manière appropriée avec des instructions préparées, vous bénéficiez d'une protection contre les injections MySQL. Les instructions préparées nettoient vos entrées, éliminant le besoin de fonctions telles que mysql_real_escape_string().

Exemple de requête de base de données sécurisée utilisant des instructions préparées

Voici un exemple de base de données sécurisée requête utilisant des instructions préparées par PDO :

$db = new PDO(
    "mysql:host=localhost;dbname=xxx;charset=utf8",
    "xxx",
    "xxx",
    [
        PDO::ATTR_EMULATE_PREPARES => false,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ]
);

// Prepared statement
$stmt = $db->prepare("SELECT id, name, color FROM Cars WHERE color = ?");

// Execute statement
$stmt->execute(array($_POST['color']));

// Fetch result
$cars = $stmt->fetchAll(PDO::FETCH_ASSOC);

Comme vous pouvez le voir, nous n'avons pas échappé ni nettoyé $_POST['color'], mais le code reste sécurisé contre l'injection MySQL grâce à PDO et à la puissance de déclarations préparées.

Notes supplémentaires

  • Transmettez toujours charset=utf8 dans votre DSN pour des raisons de sécurité.
  • Activez PDO pour afficher les erreurs comme exceptions pour une meilleure gestion des erreurs.
  • Pour les versions MySQL obsolètes (<= 5.3.6), des précautions supplémentaires peuvent être nécessaires pour la prévention des injections MySQL.

Conclusion

L'utilisation d'instructions préparées comme démontré ci-dessus est toujours plus sûre que de recourir aux fonctions mysql_*. Les mécanismes de protection intégrés de PDO offrent une approche plus robuste et plus sécurisée pour empêcher l'injection de MySQL.

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