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.

  • 🛡️ Connaître les menaces : Les principaux risques sont l'injection SQL, le cross-site scripting et l'injection de code, généralement via des formulaires ou URL paramètres.
  • 🧹 Étiquettes de bande : strip_tags supprime le HTML, JavaLes scripts et les balises PHP provenant des entrées réduisent le risque d'exécution de scripts intersites stockés.
  • Valider les données saisies : La fonction filter_var valide et nettoie les données, confirmant qu'une valeur est du type attendu avant que votre code ne lui fasse confiance.
  • (I.e. S'échapper ou lier : mysqli_real_escape_string échappe les entrées de requête, mais les requêtes préparées paramétrées constituent une défense plus efficace contre les injections SQL.
  • (I.e. Hacher les mots de passe correctement : Ne stockez jamais les mots de passe avec MD5 ou SHA1 ; utilisez password_hash et password_verify, qui appliquent un hachage bcrypt lent et salé.
  • 💡 Défense en profondeur: Combiner la validation, l'escaping, HTTPS et des comptes de base de données à privilèges minimaux plutôt que de s'appuyer sur un seul contrôle.
  • 🤖 Assistance IA : Les outils d'IA peuvent auditer le code PHP pour détecter les failles de sécurité et aider à corriger en toute sécurité les vulnérabilités liées aux injections SQL ou aux attaques XSS.

Sécurité PHP

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

PHP strip_tags

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

PHP strip_tags

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

PHP strip_tags

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.

PHP Md5 et PHP sha1

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.

FAQ

Utilisez des requêtes préparées avec des paramètres liés dans mysqli ou PDO. Elles envoient la requête et les données séparément, ce qui empêche toute modification de la structure de la requête par l'utilisateur. Cette méthode est plus robuste qu'une modification manuelle.ping contribution.

strip_tags supprime entièrement les balises HTML et PHP, tandis que htmlspecialchars les convertit en entités sûres afin qu'elles s'affichent sous forme de texte. Pour la sortie escaping Pour lutter contre les attaques XSS, htmlspecialchars est généralement le choix le plus sûr.

Générez un jeton CSRF unique par session, intégrez-le comme champ caché dans chaque formulaire et vérifiez-le lors de la soumission. Rejetez toute requête dont le jeton est manquant ou ne correspond pas à la valeur enregistrée.

Oui. L'IA peut détecter les injections SQL, les attaques XSS, les hachages de mots de passe non sécurisés et la gestion non sécurisée des fichiers, puis expliquer chaque risque et suggérer une solution. Il faut la considérer comme une première étape utile, et non comme un substitut à un audit de sécurité.

Oui. Collez le code vulnérable, et l'IA peut le réécrire avec des instructions préparées, puis afficher une escapinget la validation des entrées. Testez le code corrigé et confirmez la correction par rapport aux données d'attaque d'origine.

Résumez cet article avec :