oujood.com

real_escape_string() / mysqli_real_escape_string() : comment sécuriser vos applications PHP

Explication de la fonction real_escape_string() et mysqli_real_escape_string() en PHP, indispensables pour sécuriser vos applications contre les injections SQL.

Comment échapper les caractères spéciaux dans les requêtes SQL en PHP

PHP Version: 5+

Les fonctions real_escape_string() et mysqli_real_escape_string() sont utilisées en PHP pour échapper les caractères spéciaux dans une chaîne de caractères avant de l'utiliser dans une requête SQL. Cela permet de prévenir les attaques par injection SQL, qui sont une forme de cyberattaque qui consiste à injecter du code malveillant dans une requête SQL.

Définition et utilisation

Les deux fonctions fonctionnent de la même manière, à la seule différence que real_escape_string() est utilisée dans un style procédural, tandis que mysqli_real_escape_string() est utilisée dans un style objet-orienté.

Syntaxe procédurale de real_escape_string()

$escaped_string = real_escape_string($string, $link);

Les paramètres sont les suivants :

  • $string : La chaîne de caractères à échapper.
  • $link : Un objet mysqli représentant la connexion à la base de données.

Syntaxe objet-orientée de mysqli_real_escape_string()

$mysqli = new mysqli('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données');
$escaped_string = $mysqli->real_escape_string($string);

Valeurs possibles et paramètres

La fonction real_escape_string() retourne une chaîne de caractères échappée. Les caractères spéciaux échappés sont les suivants :

CaractèreCaractère échappé
'\'
"\"
\n\\n
\r\\r
\0\\0
\x00 à \x1F\\xHH
\\\

Exemples pratiques

Exemple 1

Exemple :     📋 Copier le code

<?php
$string = "This is a string with a 'quote' and a \"double quote\".";
$escaped_string = real_escape_string($string);

echo $escaped_string; // This is a string with a \'quote\' and a \"double quote\"."?>

Exemple 2

Exemple :     📋 Copier le code

<?php
$mysqli = new mysqli('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données');

$string = "This is a string with a 'quote' and a \"double quote\".";
$escaped_string = $mysqli->real_escape_string($string);

$query = "INSERT INTO `table` (`string`) VALUES ('$escaped_string')";
$mysqli->query($query);?>

Cas d'utilisation pratiques

Voici quelques cas d'utilisation pour real_escape_string() et mysqli_real_escape_string(), avec des exemples dans les deux approches :

Cas 1 : Enregistrement des données d'un utilisateur dans une base de données

Dans ce cas, supposons que nous avons un formulaire où l'utilisateur saisie des données

ET nous devons enregistrer les données de l'utilisateur dans une base de données. La fonction real_escape_string() est utilisée pour échapper les caractères spéciaux dans: le nom d'utilisateur, le mot de passe et d'autres informations personnelles de l'utilisateur.

Approche procédurale

Exemple :     📋 Copier le code

<?php
$name = $_POST['name'];
$password = $_POST['password'];

$escaped_name = real_escape_string($name);
$escaped_password = real_escape_string($password);

$query = "INSERT INTO `users` (`name`, `password`) VALUES ('$escaped_name', '$escaped_password')";
mysqli_query($link, $query);
?>

Approche objet-orientée

Exemple :     📋 Copier le code

<?php
$mysqli = new mysqli('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données');

$name = $_POST['name'];
$password = $_POST['password'];

$escaped_name = $mysqli->real_escape_string($name);
$escaped_password = $mysqli->real_escape_string($password);

$query = "INSERT INTO `users` (`name`, `password`) VALUES ('$escaped_name', '$escaped_password')";
$mysqli->query($query);
?>

Cas 2 : Recherche d'un utilisateur

Dans ce cas, nous devons rechercher un utilisateur dans la base de données en fonction de son nom d'utilisateur ou de son adresse e-mail. La fonction real_escape_string() est utilisée pour échapper les caractères spéciaux dans le nom d'utilisateur ou l'adresse e-mail de l'utilisateur.

Approche procédurale

Exemple :     📋 Copier le code

<?php
$username = $_POST['username'];

$escaped_username = real_escape_string($username);

$query = "SELECT * FROM `users` WHERE `username` = '$escaped_username'";
$result = mysqli_query($link, $query);
?>

Approche objet-orientée

Exemple :     📋 Copier le code

<?php
$mysqli = new mysqli('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données');

$username = $_POST['username'];

$escaped_username = $mysqli->real_escape_string($username);

$query = "SELECT * FROM `users` WHERE `username` = '$escaped_username'";
$result = $mysqli->query($query);
?>

Cas 3 : Mise à jour des informations d'un utilisateur

Dans ce cas, nous devons mettre à jour les informations d'un utilisateur dans la base de données. La fonction real_escape_string() est utilisée pour échapper les caractères spéciaux dans les nouvelles informations de l'utilisateur.

Approche procédurale

Exemple :     📋 Copier le code

<?php
$id = $_POST['id'];
$name = $_POST['name'];
$password = $_POST['password'];

$escaped_name = real_escape_string($name);
$escaped_password = real_escape_string($password);

$query = "UPDATE `users` SET `name` = '$escaped_name', `password` = '$escaped_password' WHERE `id` = '$id'";
mysqli_query($link, $query);
?>

Approche objet-orientée

Exemple :     📋 Copier le code

<?php
$mysqli = new mysqli('seveur', 'utilisateur, 'motDePasse', 'ma_base_de_données');

$id = $_POST['id'];
$name = $_POST['name'];
$password = $_POST['password'];

$escaped_name = $mysqli->real_escape_string($name);
$escaped_password = $mysqli->real_escape_string($password);

$query = "UPDATE `users` SET `name` = '$escaped_name', `password` = '$escaped_password' WHERE `id` = '$id'";
$mysqli->query($query);
?>

Ces cas d'utilisation ne sont qu'un exemple des nombreuses façons dont real_escape_string() et mysqli_real_escape_string() peuvent être utilisés pour sécuriser vos applications PHP.

Astuces et conseils d'utilisation pratique

  • Il est important d'utiliser real_escape_string() avant d'utiliser toute chaîne de caractères dans une requête SQL.
  • Si vous utilisez une chaîne de caractères qui contient des données sensibles, telles que des mots de passe ou des numéros de cartes de crédit, vous devez également utiliser un hachage de mot de passe ou un cryptage avant de l'utiliser dans une requête SQL.
  • Vous pouvez utiliser la fonction mysqli_set_charset() pour définir le jeu de caractères de la connexion à la base de données. Cela est important pour garantir que les caractères spéciaux sont échappés correctement.

Conclusion

real_escape_string() et mysqli_real_escape_string() sont des fonctions essentielles pour sécuriser vos applications PHP qui utilisent une base de données. En les utilisant correctement, vous pouvez prévenir les attaques par injection SQL et protéger vos données.


Voir aussi nos tutoriel :

fonction strtok, strtok

Coupe une chaîne en segments

dessiner des rectangles

SVG Dessiner un  rectangle

fonction soundex, soundex

Calcule la clé soundex