Fonction de sécurité PHP : strip_tags, filter_var, Md5 et sha1

Menaces de sécurité potentielles

Il s'agit essentiellement de deux groupes de personnes qui peuvent attaquer votre système.

  • Pirates – dans le but d’accéder à des données non autorisées ou de perturber l’application
  • Utilisateurs – ils peuvent innocemment saisir des paramètres erronés dans des formulaires, ce qui peut avoir des effets négatifs sur un site Web ou une application Web.

Le following sont le genre d’attaques auxquelles nous devons faire attention.

Injection SQL – Ce type d'attaque ajoute du code nuisible à SQL Déclarations.

Cela se fait à l'aide de formulaires de saisie utilisateur ou d'URL utilisant des variables.

Le code ajouté commente la condition dans la clause WHERE d'une instruction SQL. Le code annexé 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 – ce type d'attaque insère du code nuisible, généralement JavaScript. Cela se fait à 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
  • Redirigez l'utilisateur vers une autre URL.
  • D'autres menaces peuvent inclure : injection de code PHP, injection Shell, Email Injection, divulgation du code source du script, etc.

Meilleures pratiques de sécurité des applications PHP

Examinons maintenant certaines des meilleures pratiques de sécurité PHP que nous devons prendre en compte lors du développement de nos applications.

PHP strip_tags

Les fonctions strip_tags suppriment le HTML, JavaScript ou des balises PHP à partir d'une chaîne.

Cette fonction est utile lorsque nous devons protéger notre application contre des attaques telles que le cross site scripting.

Considérons 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 avez enregistré comments.php dans le dossier phptuts, accédez à l'URLhttp://localhost/phptuts/comments.php

PHP strip_tags

Supposons que vous receviez le suiviwing comme entrée de l'utilisateur alert(‘Your site sucks!’);

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo "<h4>My Commenting System</h4>";

echo $user_input;

?>

Accédez à l'URL http://localhost/phptuts/comments.php

PHP strip_tags

Sécurisons maintenant notre application contre de telles attaques en utilisant la fonction strip_tags.

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo strip_tags($user_input);

?>

Accédez à l'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 un magnifique.

Vérifiez ce lien pour la référence complète filtre_var

Le code est destiné au 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('Your site sucks!');</script>";

echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);

?>

Sortie :

alert('Your site sucks!');

Fonction mysqli_real_escape_string Cette fonction est utilisée pour protéger une application contre l'injection SQL.

Supposons que nous ayons la suitewing Instruction SQL pour valider l'identifiant utilisateur et le mot de passe.

<?php
SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass';
?>

Un utilisateur malveillant peut saisir le followwing code dans le texte de l'identifiant de l'utilisateur box. ' OR 1 = 1 — Et 1234 dans le texte du mot de passe box Codons le module d'authentification

<?php

$uid = "' OR 1 = 1 -- ";

$pwd = "1234";

$sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';";

echo $sql;

?>

Le résultat final sera

SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';

ICI,

  • "SELECT * FROM users WHERE user_id = "" teste un identifiant d'utilisateur vide
  • "' OR 1 = 1 " est une condition qui sera toujours vraie
  • "-" commente la partie qui teste 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.

<?php

$uid = mysqli_real_escape_string("' OR 1 = 1 -- ");

$pwd = mysqli_real_escape_string("1234");

$sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';";

echo $sql;

?>

Le code ci-dessus affichera

SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';

Notes le deuxième guillemet simple a été échappé pour nous, il sera traité comme faisant partie de l'identifiant utilisateur et le mot de passe ne sera pas commenté.

PHP Md5 et PHP sha1

Md5 est l'acronyme de Message Digest 5 et sha1 est l'acronyme de Secure Hash Algorithm 1.

Ils sont tous deux utilisés pour chiffrer des chaînes.

Une fois qu’une chaîne a été chiffrée, il est fastidieux de la déchiffrer.

Md5 et sha1 sont très utiles lors du stockage des mots de passe dans la base de données.

Le code ci-dessous montre l'implémentation de md5 et sha1

<?php
echo "MD5 Hash: " . md5("password");
echo "SHA1 Hash: " . sha1("password");
?>

En supposant que vous avez enregistré le fichier hashes.php dans le dossier phptuts, accédez à l'URL

PHP Md5 et PHP sha1

Comme vous pouvez le voir sur les hachages ci-dessus, si un attaquant accédait à votre base de données, il ne connaîtrait toujours pas les mots de passe permettant de se connecter.

Résumé

  • La sécurité fait référence aux mesures mises en place pour protéger une application contre les attaques accidentelles et malveillantes.
  • La fonction strip_tags est utilisée pour supprimer des balises telles que à partir des données d'entrée
  • La fonction filter_var valide et php nettoie les données d'entrée
  • mysqli_real_escape_string est utilisé pour nettoyer l'instruction SQL. Il supprime les caractères malveillants des déclarations
  • MD5 et SHA1 sont utilisés pour crypter le mot de passe.