Fonction de sécurité PHP : strip_tags, filter_var, Md5 et sha1
⚡ Résumé intelligent
La sécurité PHP protège les applications web contre les attaques et les saisies imprudentes en validant, nettoyant et stockant les données de manière sécurisée. Ce guide aborde les principales menaces, puis présente les fonctions `strip_tags`, `filter_var` et `esca`.pinget le hachage moderne des mots de passe avec password_hash pour se défendre contre les attaques XSS, les injections SQL et les identifiants volés.

Menaces de sécurité potentielles
Il existe essentiellement deux groupes de personnes capables d'attaquer votre système :
- Pirates – dans le but d’accéder à des données non autorisées ou de perturber l’application
- Les utilisateurs peuvent, par inadvertance, saisir des paramètres erronés dans les formulaires, ce qui peut avoir des effets négatifs sur un site web ou une application web.
Voici les types d’attaques auxquelles nous devons faire attention.
Injection SQL – ce type d'attaque ajoute du code malveillant à SQL Déclarations.
Cela se fait soit à l'aide de formulaires de saisie utilisateur, soit à l'aide de formulaires de saisie utilisateur. URLs qui utilisent des variables.
Le code ajouté met en commentaire la condition de la clause WHERE d'une instruction SQL. Ce code peut également :
- insérer une condition qui sera toujours vraie
- supprimer des données d'une table
- mettre à jour les données dans une table
Ce type d'attaque est généralement utilisé pour obtenir un accès non autorisé à une application.
Scripts intersites (XSS) – ce type d'attaque insère du code malveillant, généralement JavaScript. Ceci est réalisé à l'aide de formulaires de saisie utilisateur tels que les formulaires de contact et de commentaires. Ceci est fait pour :
- Récupérer des informations sensibles telles que données de cookies
- Rediriger l'utilisateur vers un autre URL.
Parmi les autres menaces, on peut citer l'injection de code PHP, l'injection de shell, l'injection d'emails et la divulgation du code source des scripts.
Meilleures pratiques en matière de sécurité des applications PHP
Examinons maintenant quelques bonnes pratiques de sécurité PHP à prendre en compte lors du développement.ping nos applications.
PHP strip_tags
La fonction strip_tags supprime le HTML, Javascénario, ou des balises PHP à partir d'une chaîne de caractères.
Cette fonction est utile lorsque nous devons protéger notre application contre des attaques telles que les attaques de type cross-site scripting.
Prenons l'exemple d'une application qui accepte les commentaires des utilisateurs.
<?php $user_input = "Your site rocks"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
En supposant que vous ayez enregistré comments.php dans le dossier phptuts, accédez à URL http://localhost/phptuts/comments.php
Supposons que vous receviez les données suivantes comme entrée utilisateur : alert(‘Your site sucks!’);
<?php $user_input = "<script>alert(0);</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Naviguez vers le URL http://localhost/phptuts/comments.php
Sécurisons maintenant notre application contre de telles attaques à l'aide de la fonction strip_tags.
<?php $user_input = "<script>alert(0);</script>"; echo strip_tags($user_input); ?>
Naviguez vers le URL http://localhost/phptuts/comments.php
Fonction PHP filter_var
La fonction filter_var est utilisée pour valider et nettoyer les données.
La validation vérifie si les données sont du bon type. Une vérification de validation numérique sur une chaîne renvoie un résultat faux.
La désinfection consiste à supprimer les caractères illégaux d'un string.
Consultez ce lien pour obtenir la référence complète : filtre_var
Le code ci-dessous concerne le système de commentaires. Il utilise la fonction `filter_var` et la constante `FILTER_SANITIZE_STRIPPED` pour supprimer les balises.
<?php $user_input = "<script>alert(0);</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
Sortie :
alert('Your site sucks!');
À noter: La fonction FILTER_SANITIZE_STRIPPED (alias de FILTER_SANITIZE_STRING) est obsolète depuis PHP 8.1. Pour le nouveau code, utilisez strip_tags() ou, pour un affichage sûr, htmlspecialchars().
PHP mysqli_real_escape_string
La fonction mysqli_real_escape_string est utilisée pour protéger une application contre les injections SQL.
Supposons que nous ayons l'instruction SQL suivante pour valider l'identifiant et le mot de passe de l'utilisateur.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
Un utilisateur malveillant peut entrer ' OU 1 = 1 — Saisissez l'identifiant dans le champ prévu à cet effet et 1234 dans le champ du mot de passe. Passons maintenant au codage du module d'authentification.
<?php $uid = "0$uid1$pwd';"; echo $sql; ?>
Le résultat final sera :
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
ICI,
- « WHERE uid = » teste si l'identifiant utilisateur est vide.
- « OU 1 = 1 » est une condition qui sera toujours vraie.
- Le symbole « – » permet de commenter la partie qui vérifie le mot de passe.
La requête ci-dessus renverra tous les utilisateurs. Utilisons maintenant la fonction `mysqli_real_escape_string` pour sécuriser notre module de connexion. Notez que, dans le code réel, cette fonction prend la connexion à la base de données comme premier argument.
<?php $uid = mysqli_real_escape_string($conn, "0$uid1$pwd';"; echo $sql; ?>
Le code ci-dessus affichera :
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
Remarque : la deuxième apostrophe a été échappée, elle sera donc considérée comme faisant partie de l’identifiant de l’utilisateur et le mot de passe ne sera pas mis en commentaire.
Meilleure pratique : appâtping Cela aide, mais les requêtes préparées paramétrées dans mysqli ou PDO constituent la défense recommandée contre l'injection SQL, car les données ne sont jamais mélangées au texte de la requête.
PHP Md5 et PHP sha1
MD5 est l'acronyme de Message Digest 5, et SHA1 est l'acronyme de Secure Hash Algorithm 1. Ce sont toutes deux des fonctions de hachage unidirectionnelles.
Le code ci-dessous illustre l'implémentation de md5 et sha1.
<?php echo "MD5 Hash: " . md5("password"); echo "SHA1 Hash: " . sha1("password"); ?>
En supposant que vous ayez enregistré le fichier hashes.php dans le dossier phptuts, accédez à URL.
Important: MD5 et SHA1 sont des hachages rapides et non salés. n'est plus considéré comme sûr pour stocker les mots de passeEn effet, elles peuvent être rapidement déchiffrées grâce au matériel moderne et aux tables arc-en-ciel. Utilisez-les uniquement pour les sommes de contrôle non liées à la sécurité et privilégiez la méthode ci-dessous pour les mots de passe.
Comment hacher les mots de passe de manière sécurisée en PHP
Pour le stockage des mots de passe, PHP propose les fonctions `password_hash` et `password_verify`. Celles-ci utilisent un algorithme de hachage lent (bcrypt par défaut), ce qui garantit que chaque hachage est unique et difficile à casser, même en cas de vol de votre base de données.
<?php // Hash a password before storing it in the database $hash = password_hash("mypassword", PASSWORD_DEFAULT); // Verify the password when the user logs in if (password_verify("mypassword", $hash)) { echo "Password is valid"; } else { echo "Invalid password"; } ?>
- mot_de_passe_hachage() Génère un hachage salé à stocker dans la base de données ; PASSWORD_DEFAULT vous permet de conserver l’algorithme recommandé actuel.
- vérification_mot_de_passe() vérifie une tentative de connexion par rapport au hachage stocké sans jamais le déchiffrer.
Comme le sel et l'algorithme sont stockés dans le hachage, vous n'avez jamais à les gérer vous-même, ce qui en fait la méthode correcte et pérenne pour gérer les mots de passe en PHP.




