Nettoyer les entrées en PHP

Shraddha Paghdar 30 janvier 2023
PHP
  1. Nettoyage des entrées HTML à l’aide de htmlentities() en PHP
  2. Nettoyage des entrées HTML à l’aide de filter_var() en PHP
  3. Assainissement des requêtes SQL en PHP
Nettoyer les entrées en PHP

Les données utilisateur doivent être stockées dans la base de données, mais avant de les stocker dans la base de données, nous devons nous assurer que les données malformées ne sont pas transmises ; sinon, il bousillera la base de données. Cela protégera l’intégrité des données. Les utilisateurs confondent souvent la désinfection et la validation. La seule différence entre eux est que la validation garantit que les données sont dans le bon format ou non, tandis que plus tard, elle s’assure qu’aucun caractère illégal n’est présent dans les données. Dans l’article d’aujourd’hui, nous allons apprendre à nettoyer les données d’entrée en PHP avant de les transmettre à la base de données (RDBMS/NoSQL).

L’entrée la plus courante qui doit être nettoyée est le HTML, l’entrée via des requêtes SQL et les informations de profil utilisateur.

Nettoyage des entrées HTML à l’aide de htmlentities() en PHP

C’est une fonction intégrée fournie par PHP qui convertit tous les caractères en entités HTML. Vous pouvez également utiliser htmlspecialchars(), la seule différence entre ces deux fonctions est que htmlspecialchars() convertit les caractères spéciaux en entités HTML tandis que htmlentities() convertit tous les caractères.

Syntaxe de htmlentities() en PHP

htmlentities(string $string, $flags, $characterSet, boolean $doubleEncode);

Paramètres

  • $string : C’est un paramètre obligatoire, qui prend des données d’entrée sur lesquelles la conversion doit être effectuée.
  • $flags : il s’agit d’un paramètre facultatif qui spécifie comment gérer les encodages invalides, les guillemets et le type de document utilisé. Certains des drapeaux sont ENT_COMPAT, ENT_IGNORE, ENT_HTML5, ENT_NOQUOTES, etc.
  • $characterSet : c’est un paramètre facultatif qui spécifie quel jeu de caractères utiliser. Certains des jeux de caractères sont UTF-8, ISO-8859-1, etc.
  • doubleEncode : C’est un paramètre optionnel qui spécifie s’il faut encoder ou non les entités HTML existantes. La valeur par défaut sera true, ce qui convertira tout.

Valeur de retour

La sortie de la fonction ci-dessus contient une chaîne convertie. Il renverra une chaîne vide si le paramètre de chaîne contient un codage invalide à moins que des indicateurs ne soient définis comme ENT_IGNORE ou ENT_SUBSTITUTE.

Exemple de code :

<?php
    $str = '<a href="https://www.google.com">Go to google.com</a>';
    echo htmlentities($str);
?>

Production :

&lt;a href=&quot;https://www.google.com&quot;&gt;Go to google.com&lt;/a&gt;

Nettoyage des entrées HTML à l’aide de filter_var() en PHP

Il s’agit d’une fonction intégrée fournie par PHP dans laquelle la validation et l’assainissement sont effectués sur les données d’entrée.

Syntaxe de filter_var() en PHP

filter_var($inputValue, $filterType);

Paramètres

  • $inputValue : C’est un paramètre obligatoire, qui prend des données d’entrée sur lesquelles le contrôle de filtre sera appliqué.
  • $filterType : C’est un paramètre obligatoire, qui spécifie quel contrôle de filtre doit être effectué sur les données d’entrée. Les valeurs prises en charge sont :
    • FILTER_VALIDATE_INT : Si la donnée d’entrée est un entier valide ou non.
    • FILTER_SANITIZE_STRING : si les données d’entrée sont une chaîne valide ou non et supprimez toutes les balises HTML d’une chaîne d’entrée.
    • FILTER_VALIDATE_IP : si les données d’entrée sont une adresse IP valide ou non.
    • FILTER_SANITIZE_EMAIL : si les données saisies sont une adresse e-mail valide ou non. Filter var supprimera d’abord les caractères illégaux, puis la validation sera effectuée.

Valeur de retour

Renvoie la valeur filtrée si elle est passée avec succès.

Exemple de code :

<?php
    $inputString = "<p>Hello World! Welcome to PHP tutorial</p>";
    $newstr = filter_var($inputString, FILTER_SANITIZE_STRING);
    echo $newstr. "\n";
?>

Production :

Hello World! Welcome to PHP tutorial

Assainissement des requêtes SQL en PHP

Pour éviter l’injection SQL, les développeurs doivent toujours utiliser PDO/MySQLi. PDO est une couche d’abstraction de base de données. PDO nettoie et intègre des données externes dans une requête SQL en toute sécurité et évite ce type de problèmes. Avant d’envoyer des données à la base de données, traitez les données à l’aide de filter_var().

Exemple de code :

<?php
    $servername = "hostname";
    $username = "username";
    $password = "password";
    $dbname = "databaseName";
    $lastname = "doe";

    $connection = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $statement = $connection->prepare("SELECT id, email, firstname, lastname FROM Users WHERE lastname=:lastname");
    $statement->execute(['lastname' => $lastname]);

    $resultOuput = $statement->setFetchMode(PDO::FETCH_ASSOC);
?>
Shraddha Paghdar avatar Shraddha Paghdar avatar

Shraddha is a JavaScript nerd that utilises it for everything from experimenting to assisting individuals and businesses with day-to-day operations and business growth. She is a writer, chef, and computer programmer. As a senior MEAN/MERN stack developer and project manager with more than 4 years of experience in this sector, she now handles multiple projects. She has been producing technical writing for at least a year and a half. She enjoys coming up with fresh, innovative ideas.

LinkedIn