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.
Voici les types 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 généralement du code nuisible JavaScript. Cela se fait à l'aide de formulaires de saisie utilisateur tels que les formulaires de contact et de commentaires. Cela 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 : l'injection de code PHP, l'injection de shell, l'injection d'e-mails, la divulgation du code source du script, etc.
Meilleures pratiques en matière 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, Javascénario 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
Supposons que vous receviez ce qui suit comme entrée 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
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
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 disposions de l'instruction SQL suivante 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 code suivant dans la zone de texte de l'identifiant de l'utilisateur. ' OR 1 = 1 — Et 1234 dans la zone de texte du mot de passe 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
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.