Maison  >  Article  >  base de données  >  Comment échapper aux entrées de l'utilisateur lors de la migration de mysql_* vers PDO ?

Comment échapper aux entrées de l'utilisateur lors de la migration de mysql_* vers PDO ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-26 12:51:03496parcourir

 How to Escape User Input When Migrating from mysql_* to PDO?

Équivalent PDO de mysql_real_escape_string

Question :

Lors de la migration de mysql_* vers PDO, quel est l'équivalent du Fonction mysql_real_escape_string ?

Réponse :

Contrairement à mysql_real_escape_string, PDO effectue un échappement automatique grâce à l'utilisation d'instructions préparées. Les instructions préparées utilisent des espaces réservés (par exemple ?) au lieu d'insérer directement les entrées de l'utilisateur dans les requêtes SQL, empêchant ainsi les vulnérabilités d'injection SQL.

Exemple :

<code class="php">try {
    $db = new PDO(...);
} catch (PDOException $e) {
    echo "Error connecting to mysql: " . $e->getMessage();
}

if (isset($_POST['color'])) {
    $stmt = $db->prepare("SELECT id, name, color FROM Cars WHERE color = ?");
    $stmt->execute([$_POST['color']]);

    $cars = $stmt->fetchAll(\PDO::FETCH_ASSOC);
    var_dump($cars);
}</code>

Dans cet exemple , $_POST['color'] est passé en tant que paramètre dans l'instruction préparée, protégeant la requête de l'injection.

Remarques supplémentaires :

  • Toujours inclure charset=utf8 dans le DSN de la connexion PDO pour des raisons de sécurité.
  • Activez le mode d'erreur PDO pour les exceptions (PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION) pour gérer les erreurs de base de données avec élégance.
  • Soyez prudent avec des versions MySQL obsolètes (MySQL < 5.3.6), où des précautions supplémentaires peuvent être nécessaires.
  • Référez-vous aux ressources ci-dessous pour plus d'informations sur la prévention des injections PDO et SQL.

Lectures complémentaires :

  • Tutoriel PDO pour les développeurs 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