Maison > base de données > tutoriel mysql > Comment puis-je utiliser en toute sécurité l'extension « mysql_ » en PHP pour empêcher l'injection SQL et améliorer la sécurité du code ?

Comment puis-je utiliser en toute sécurité l'extension « mysql_ » en PHP pour empêcher l'injection SQL et améliorer la sécurité du code ?

Patricia Arquette
Libérer: 2024-12-18 06:51:11
original
361 Les gens l'ont consulté

How Can I Securely Use the `mysql_` Extension in PHP to Prevent SQL Injection and Enhance Code Safety?

Un guide complet pour améliorer la sécurité du code MySQL

Introduction

Le mysql_ L'extension, bien qu'elle soit encore couramment utilisée, introduit souvent des vulnérabilités dans le code PHP en raison d'une mauvaise gestion des entrées utilisateur et des rapports d'erreurs. Cet article vise à présenter un exemple de code sécurisé et efficace qui présente l'utilisation correcte des fonctions mysql_.

Échantillon de code

<?php

// Set HTTP headers for character encoding
header('Content-type: text/html; charset=utf-8');

// Enable error reporting for development and testing
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
// In production, set 'display_errors' to 0 to suppress PHP error messages

// Database configuration (modify as needed)
$config = [
    'host' => '127.0.0.1',
    'user' => 'my_user',
    'pass' => 'my_pass',
    'db' => 'my_database'
];

// Connect to the database and disable MySQL error output
$connection = @mysql_connect($config['host'], $config['user'], $config['pass']);
if (!$connection) {
    trigger_error('Unable to connect to database: ' . mysql_error(), E_USER_ERROR);
}

// Select the database
if (!mysql_select_db($config['db'])) {
    trigger_error('Unable to select db: ' . mysql_error(), E_USER_ERROR);
}

// Set character encoding for the connection
if (!mysql_set_charset('utf8')) {
    trigger_error('Unable to set charset for db connection: ' . mysql_error(), E_USER_ERROR);
}

// Accept and sanitize POST values
$id = (int) $_POST['id']; // To prevent SQL injection
$name = mysql_real_escape_string($_POST['name']); // Protects against SQL injection

// Construct and execute the UPDATE query
$result = mysql_query(
    'UPDATE tablename SET name = "' . $name . '" WHERE id = "' . $id . '"'
);

// Check the result and provide feedback
if ($result) {
    echo htmlentities($name, ENT_COMPAT, 'utf-8') . ' updated.';
} else {
    trigger_error('Unable to update db: ' . mysql_error(), E_USER_ERROR);
}
?>
Copier après la connexion

Sécurisé Pratiques de codage

Cet exemple de code aborde les pratiques de codage suivantes pour améliorer sécurité :

  • Prévention des injections SQL : Les valeurs POST 'id' et 'name' sont nettoyées et validées avant d'être utilisées dans la requête.
  • Rapport d'erreurs : les messages d'erreur détaillés sont supprimés en mode production pour empêcher l'exposition d'informations sensibles. Cependant, les erreurs sont toujours enregistrées à des fins de débogage.
  • Support Unicode : le codage des caractères de la connexion à la base de données est défini sur « utf8 » pour garantir une gestion correcte des caractères spéciaux.
  • Comparaison lâche : la clause WHERE utilise une comparaison lâche avec la variable requestId, qui est plus lisible et moins sujette aux erreurs.

Conclusion

En suivant ces pratiques, nous pouvons créer des requêtes de base de données sécurisées et fiables à l'aide de l'extension mysql_. Bien que PDO soit l'approche recommandée pour les nouvelles applications PHP, cet exemple de code fournit une base solide pour utiliser en toute sécurité les fonctions mysql_ lorsque cela est nécessaire.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal