• Skip to main content
  • Skip to header right navigation
  • Skip to after header navigation
  • Skip to site footer
  • Facebook
  • Twitter
  • Instagram
Lesjeudis

Blog Les Jeudis

Actualité Informatique et Digital

  • Tous les annonces
  • Employeurs
  • Développement
  • Réseaux et Systèmes
  • Digital
  • Marché de l’emploi
  • Conseils
  • Evénements
  • Formation
Bannière Securité PHP

Découvrez 9 importantes failles de sécurité de PHP ainsi que les moyens de les corriger

11/01/2023 par Team LesJeudis

Avec plus de 80% des sites en ligne qui fonctionnent avec PHP comme langage côté serveur, le problème de la sécurité de PHP est un point qui mérite d’être évoqué.

Le langage PHP sert à concevoir plusieurs types de programmes informatiques, mais sa grande notoriété est principalement due au fait qu’il gère le backend de la majorité des Systèmes de Gestion de Contenus, WordPress notamment.

D’ailleurs, près de 40% des sites que vous trouverez sur internet sont des WordPress.

L’impressionnante base d’utilisateurs de PHP et sa communauté active l’exposent donc à des attaques informatiques continues et à de nombreuses menaces de sécurité.

Cela est d’autant plus inquiétant lorsqu’on sait que ce langage de programmation est celui qui présente le plus grand nombre de failles de sécurité.

En effet, les sites web et autres applications qui utilisent cette technologie sont la cible de nombreuses cyberattaques et tentatives de piratage. Une statistique révèle d’ailleurs qu’en 2019, plus de 30 000 sites Web ont été piratés par jour, avec une attaque perpétrée chaque 40 secondes.

Néanmoins, malgré les nombreuses failles de sécurité de PHP, son statut de langage de programmation performant et dynamique ne peut pas être remis en question. Il a d’ailleurs une popularité grandissante dans l’univers de la technologie, de la vente en détail et du e-commerce.

Il existe différents moyens de régler les problèmes de sécurité du langage PHP. En effet, les vulnérabilités d’une application PHP peuvent être identifiées et corrigées avant qu’elles ne causent des dommages graves, voire irréversibles.

Voici alors pour vous, 9 grandes failles de sécurité de PHP et les moyens de les corriger.

Pourquoi PHP n’est-il pas si sécurisé ?

Le langage PHP comporte des failles de sécurité fondamentales dans sa conception, notamment avec l’absence du principe directeur Secure By Design.

Secure By Design consiste essentiellement à incorporer des fonctionnalités de sécurité de base pour faciliter la vie aux programmeurs et aux utilisateurs finaux. Avec ce principe, ces derniers ne seraient pas obligés de se gêner pour sécuriser ou offrir un bon niveau de sécurité au code PHP.

En fait, toutes les applications et librairies développées en PHP ont des vulnérabilités au niveau de leur système de sécurité. Par exemple, une fonctionnalité de base manquante peut compromettre la protection face à diverses potentielles attaques.

En pratique, de nombreuses fonctions PHP permettent d’effectuer des tâches système sensibles comme :

  • Les opérations réseau ;
  • L’accès à la base de données ;
  • La manipulation des fichiers.

À travers des applications Web Shell, ces fonctions de base peuvent même être exploitées par des hackers pour compromettre ou pour contrôler les serveurs web.

Il convient de préciser que la plupart des failles de sécurité présentes dans les codes PHP sont le résultat d’erreurs ou d’omissions survenues pendant l’écriture du code source. De nombreuses brèches proviennent d’ailleurs d’entrées utilisateurs non contrôlées ou filtrées.

En effet, les applications PHP reçoivent généralement des informations renseignées par divers utilisateurs via des champs de formulaire. Si la sécurité de PHP n’est pas renforcée et que ces entrées contiennent du code malveillant, il est transmis à l’application et peut causer de nombreux dégâts.

Les 9 plus grandes failles de sécurité de PHP et comment les corriger

Si de nombreuses attaques d’applications développées avec du PHP sont orientées vers les formulaires, il y en a bien d’autres. Découvrez ici les principales vulnérabilités de PHP exploitées par les pirates informatiques.

1 – Les attaques par inclusion de fichiers

Ces failles de sécurité de PHP exploitent la vulnérabilité des applications qui acceptent les contenus téléchargés à savoir documents, images et autres. Toutefois, on distingue deux principaux types d’attaques par inclusion de fichier malveillant : celles à distance et celles locales.

Les attaques par inclusion de fichier malveillant à distance et locales

Dans une attaque par inclusion de fichiers à distance, un cybercriminel parvient à insérer un lien vers un code malveillant sur le site piraté. Cette faille de sécurité de PHP peut notamment consister à l’inclusion d’une bibliothèque contenant un code malveillant par le biais d’une URL.

Ce programme malveillant peut alors s’exécuter sur l’application web PHP cible pour permettre à l’attaquant d’accéder à la plateforme ou d’y avoir un contrôle total.

Dans le cadre d’une attaque par inclusion de fichier local par contre, le fichier qui est inclus est un fichier qui est déjà présent sur le serveur web hébergeant l’application cible.

Comment prévenir les attaques par inclusion de fichiers ?

Les fonctions PHP require(), require_once(), include(), include_once(), file_get_contents() et fopen() sont utilisées dans la majorité de ces cyber attaques. Pour les prévenir, il faut veiller à leur implémentation.

Vous pouvez également vérifier les paramètres de certains drapeaux du fichier php.ini. « allow_url_fopen » indique si les fichiers externes peuvent être inclus ou non sur le site.

« allow_url_inclide » par contre indique si les fonctions d’inclusion PHP Include et Require peuvent charger des fichiers distants. Vous devez vous assurer que ces drapeaux sont désactivés.

2 – Les attaques de scripts intersites (XSS)

Les failles de sécurité de PHP XSS pour Cross-site Scripting sont très courantes et très utilisées par les pirates informatiques. Côté client, elles consistent à injecter un code HTML ou JavaScript malveillant sur une page Web afin de voler des mots de passe, des cookies ou d’autres informations.

Cette faille de sécurité de PHP peut également permettre à un hacker d’obtenir des accès de niveau administrateur.

Prenons cet exemple de code censé afficher un message de bienvenue sur une page d’un site utilisant PHP.

afficher un message de bienvenue sur une page d'un site utilisant PHP

Ce bout de code récupère un prénom stocké dans la variable GET, qu’il affiche dans le message.

En quoi consistent-elles ?

Plutôt que de renseigner le nom attendu au niveau de ce champ du formulaire, un utilisateur mal intentionné peut y insérer un bout de code malveillant pour exploiter la faille XSS.

Il suffirait par exemple d’envoyer comme entrée pour voir le message « Faille PHP » s’afficher dans une boîte de dialogue.

Cela montre bien que divers codes malveillants peuvent être injectés de cette manière, causant de graves dommages. On distingue trois principaux types d’attaques de scripts intersites :

  • Les XSS réfléchis ;
  • Les XSS persistants ;
  • Les XSS basés sur le DOM.

L’exemple précédent est un cas de XSS réfléchi, où les données du formulaire sont affichées avec la méthode echo() sans contrôle préalable. La faille de sécurité de PHP XSS persistant par contre infecte la base de données, puis tous les utilisateurs de la plateforme. Ces deux failles se produisent côté serveur.

Le XSS basé sur le DOM enfin modifie l’environnement DOM (Document Object Model). Toutefois, la modification est seulement possible si l’application Web affiche des données dans le DOM sans effectuer un nettoyage approprié.

Comment se protéger des attaques de scripts intersites sur une application développée en PHP ?

  • Différentes solutions permettent de corriger la vulnérabilité du PHP aux attaques de scripts intersites. Entre autres, vous pouvez :
  • Inclure une protection anti XSS dans le header afin de désamorcer ces attaques ;
  • Convertir les caractères spéciaux des entrées de formulaires en entités HTML grâce aux fonctions PHP htmlspecialchars() et htmlentities() ;
  • Retirer les éléments entre les balises HTML grâce à la fonction strip_tags() ;
  • Utiliser un pare-feu d’application web (WAF) ;
  • Adopter des bibliothèques PHP spécifiques comme PHP Anti-XSS, htmlLawed ou un programme de filtrage HMTL ;
  • Empêcher les hackers de mettre fin aux affectations de variables et ajouter le code exécutable à la fin avec la fonction adslashes().

Pour vous protéger des failles XSS sur une application PHP, vous pouvez également utiliser une convention de dénomination stricte. Elle permet de faire une distinction entre les données filtrées et celles qui ne le sont pas.

3 – La falsification de requête intersite (CSRF)

Les attaques de falsification de requête intersite ou Cross-site Request Forgery (CSRF) se font du côté de l’utilisateur. Et plus les utilisateurs de l’utilisateur ont des privilèges, plus les dangers encourus sont grands.

Les failles de sécurité CSSRF : en quoi consistent-elles ?

Les cybercriminels peuvent exploiter ces failles pour concevoir des requêtes HTTP qui seront exécutées sur la page web. En pratique, cette menace qui plane sur les applications PHP incite l’utilisateur à cliquer sur un lien malveillant. Les conséquences peuvent alors être diverses :

  • L’annulation de l’accès de manière discrète ;
  • L’envoi automatique de requêtes d’apparence légitime au serveur au nom de l’utilisateur ;
  • Le vol d’informations de session.

Si la défense contre ces failles de sécurité de PHP relativement discrètes est plus compliquée, certaines mesures permettent heureusement de s’en protéger.

Comment se protéger des attaques CSRF sur un programme développé en PHP ?

L’utilisation de jetons d’authentification (tokens) constitue le meilleur moyen de se protéger des attaques de falsification de requête intersite. Ces tokens doivent toutefois être renouvelés à chaque connexion pour compliquer la tâche aux pirates informatiques.

L’incontournable CMS WordPress par exemple utilise « nonce » qui change de façon journalière. Cependant, il faut encore s’assurer que chaque plugin de son site WordPress utilise ce système pour avoir une meilleure protection de ce point de vue. Comme autre mesure à prendre, on peut :

  • Utiliser la méthode POST plutôt que GET sur les formulaires ;
  • Adopter des mécanismes d’authentification par défi-réponse de base avec des attributs de formulaire masqués par exemple ;
  • Utiliser le protocole internet HTTPS.

Le HTTPS crypte la connexion entre l’utilisateur et le site web. Il renforce ainsi la sécurité de PHP en le protégeant des attaques CSRF et de bien d’autres failles de ce langage de programmation.

4 – Le détournement de session (session hijacking)

Un détournement de session consiste essentiellement au vol de l’ID de session d’un utilisateur. Cet identifiant permet par la suite au hacker d’accéder à toutes les informations stockées dans la session.

Les informations de connexion ou d’authentification à divers sites peuvent ainsi être dérobées et exploitées. Les dommages sont généralement très importants lorsque l’utilisateur dont l’ID de session a été volé est un administrateur.

Pour éviter le piratage de session, il est possible de changer l’ID de session grâce à la fonction session_regenerate_id(). Sur une application, on peut aussi neutraliser cette faille de sécurité de PHP en empêchant le JavaScript (JS) d’accéder à l’ID de session.

Le paramètre session.cookie.httponly dans le fichier php.ini et la fonction session_set_cookie_params() permettent de le faire. Il faut aussi s’assurer que les données d’identification de session ne sont pas stockées dans un dossier accessible au public.

5 – Les injections SQL

Un hacker peut atteindre la base de données d’une application PHP en injectant du code SQL malveillant qui est exécuté côté serveur web. Ces attaques sont généralement perpétrées par le biais de formulaires mal traités pour renvoyer des informations confidentielles comme :

  • Des informations privées des utilisateurs ;
  • Le contenu de la base de données ;
  • Les mots de passe et identifiants, etc.

Une faille de sécurité de PHP par injection de SQL peut également donner accès à l’intégralité du site web à un hacker. Dans certains cas, l’utilisateur malveillant peut même prendre contrôle du serveur web.

Voici un exemple de code backend vulnérable aux injections SQL.

un code vulnérable aux injections SQL

Le formulaire associé est :

code avec une grande vulnérabilité aux injections SQL

Ce code a une grande vulnérabilité aux injections SQL, car aucun contrôle n’est effectué pour vérifier les informations entrées dans le formulaire. Il accepte toutes les saisies des utilisateurs.

Du code SQL malveillant peut ainsi être injecté pour dérober des informations confidentielles ou pour commettre d’autres forfaits. Ils peuvent d’ailleurs conduire à la destruction du serveur web. Très courantes, ces failles de sécurité de PHP représentent près du 2/3 des attaques sur internet.

Le contrôle et la vérification de toutes les entrées utilisateurs constituent le meilleur moyen d’éviter les attaques par injection SQL. Il faut alors filtrer toutes les données de formulaire et utiliser des guillemets pour dans toutes les valeurs d’instructions SQL quand c’est possible.

L’utilisation de caractères d’échappement peut également aider à se protéger des injections SQL.

6 – L’injection de commande

Les attaques par injection SQL et celles par injection de commande sont assez similaires. Toutefois, les failles de sécurité de PHP relatives aux injections de commande ciblent plutôt le système. Ces attaques sont également perpétrées sur le système d’exploitation du serveur web.

Il faut trois éléments essentiels pour la réussite d’une attaque par injection de commande :

  • L’application PHP utilise un appel système ;
  • La commande passée en argument à la fonction est créée par le biais d’une entrée externe ;
  • L’entrée n’est pas valide ou filtrée.

La suppression de ces conditions permet de se préserver des attaques par injection de commandes. Évitez autant que possible les appels système et utilisez plutôt des fonctions intégrées du PHP pour interagir avec le serveur web.

7 – L’exécution de code à distance

Cette faille PHP permet aux hackers de charger du code malicieux sur un site internet et de les exécuter à distance. Elle survient souvent en cas de bug lorsque l’application PHP accepte des entrées d’utilisateurs et les interprète mal comme s’ils étaient du code PHP.

Ces problèmes de sécurité de PHP peuvent permettre de prendre intégralement le contrôle d’un site web. Toutes les mesures nécessaires doivent alors être prises pour corriger ces vulnérabilités. Pour ce faire :

  • Filtrez toutes les données et assurez-vous qu’elles ne sont pas malveillantes avant de les traiter ;
  • Installez des protocoles d’accès et d’authentification efficaces ;
  • Utilisez des pares-feux pour applications web pour vous préserver des attaques à distance.

L’installation et la bonne configuration d’un pare-feu offrent une réelle protection contre ces attaques.

8 – Le contournement d’authentification, faille de sécurité de PHP 

Les failles relatives au contournement d’authentification proviennent d’une erreur du développeur. Ici, l’application donne par erreur un niveau d’accès beaucoup plus élevé qu’elle le devrait à un utilisateur.

Les développeurs débutants font souvent cette erreur avec la fonction PHP is_admin() par exemple. En effet, cette méthode PHP ne permet pas de déterminer si l’utilisateur est un administrateur. Elle permet plutôt de vérifier si l’utilisateur consulte une page d’administration. Des utilisateurs de bas niveau peuvent ainsi avoir des accès de niveau supérieur et en abuser.

Vous pouvez faire analyser votre code source par des développeurs expérimentés ou des spécialistes de la sécurité informatique pour vous assurer de l’absence de failles d’authentification. Certains outils de test de sécurité permettent également de détecter ces vulnérabilités.

9 – L’injection d’objet en PHP

Les attaques par injection d’objet en PHP sont perpétrées grâce à la fonction unserialise() et grâce à des entrées d’utilisateur non filtrées. Elles aboutissent à une injection d’objets en PHP dans la mémoire et peuvent avoir de graves conséquences comme des injections SQL ou l’arrêt total de l’application.

Comme pour toutes les autres failles de sécurité de PHP relatives aux injections, pour éviter une injection d’objet en PHP, il faut bien contrôler, nettoyer et filtrer chaque entrée utilisateur.

La validation et le filtrage des données, de formulaires notamment

La validation et le nettoyage de tous les différents types d’entrées constituent une mesure essentielle à prendre pour renforcer la sécurité de PHP des applications.

L’étape de la validation consiste à vérifier toutes les données qui parviennent au code source du programme. Il faut pouvoir vérifier les données attendues, leur format, leur longueur, etc. La moindre négligence ici expose à des failles de sécurité de PHP qui peuvent avoir de graves répercussions.

Ensuite, il faut supprimer tous les caractères illégaux contenus dans les données envoyées par tout utilisateur, même s’il est un administrateur. De nombreux filtres PHP permettent de bien valider et de nettoyer des entrées externes qui peuvent être :

  • Des données de service web ;
  • Des cookies ;
  • Des entrées utilisateurs de formulaires ;
  • Des variables de serveur ;
  • Des résultats de requêtes vers la base de données.

La fonction de filtre PHP filter_var() est assez efficace pour valider et assainir des données entrées en premier paramètre. Un second paramètre de la fonction indique le type de filtrage à effectuer.

Voici un exemple d’utilisation de cette fonction sur l’illustration suivante :

validating and sanitizing data entered as the first parameter

Comment protéger un site web PHP des cyberattaques ?

En raison de ses nombreuses failles de base et de son utilisation très répandue, la sécurité du langage de programmation PHP doit être assurée sur toutes les applications qui l’utilisent. Heureusement, certaines mesures de base permettent de bien renforcer sa protection sur les sites web PHP.

1 – Des mots de passe forts

Le faible niveau de sécurité des identifiants d’utilisateurs sur les applications web est à la base de nombreux piratages informatiques. Pour avoir des mots de passe robustes et fortement sécurisés, il faut :

  • Inclure des caractères en minuscule, des caractères en majuscule et des caractères alphanumériques ;
  • Avoir des mots de passe de 7 caractères au moins : plus il y en a, plus le mot de passe est difficile à casser ;
  • Utiliser des phrases, car elles sont difficiles à cracker.

Un changement régulier de ses mots de passe réduit également considérablement les risques de se faire pirater. Cette mesure est très efficace pour renforcer la sécurité de PHP.

2 – L’authentification à facteurs multiples

L’authentification multi facteurs ajoute une grande couche de sécurité supplémentaire. Elle garantit que les hackers ne puissent pas accéder au site et causer des dommages, même s’ils détiennent des informations d’identification.

Pour renforcer la sécurité de PHP, il est notamment possible d’activer une authentification à deux facteurs sur WordPress.

3 – Le filtrage de données pour la sécurité de PHP

Pour se protéger des bouts de code malveillants et des attaques par injection SQL, le filtrage des données est la meilleure solution à envisager. Il est possible de développer un unique module de sécurité qui serait placé au début de tous les scripts accessibles au public.

4 – Utiliser un pare-feu d’application web

Un pare-feu bien configuré est une excellente protection pour une application Web. Il empêche les hackers et les logiciels malveillants d’atteindre le serveur hôte pour y injecter du code ou encore pour y récupérer des données. On en trouve pour tous les systèmes d’exploitation.

Conclusion

Comme tous les autres langages de programmation, PHP a des failles et des limites au niveau de sa sécurité. Toutefois, cette technologie est déjà très exposée pour deux principales raisons. D’abord, depuis quelques années, elle régit le fonctionnement de plus de la moitié des sites en ligne.

Ensuite, la conception même du langage PHP porte les germes de nombreuses failles de sécurité, car elle n’utilise pas le principe directeur Secure By Design. Si votre site a été développé avec PHP, ses bases de données sont exposées à de nombreuses vulnérabilités.

Les cybercriminels font alors des applications web PHP et de leurs utilisateurs une cible de choix. Ils attaquent la sécurité de PHP de diverses manières, notamment par injection de code, par scripts intersites, par détournement de session, etc.

Heureusement, de nombreuses mesures et astuces permettent de corriger ces failles du langage PHP pour se protéger. Elles renforcent la sécurité de PHP pour permettre d’exploiter le plein potentiel de ce langage de programmation dont l’efficacité et les performances ne souffrent d’aucune contestation.

  • Parcourez nos offres d’emploi en Securité informatique
Categorie: Développement

About Team LesJeudis

Lesjeudis est fier de compter sur une équipe multidisciplinaire de professionnels techniques et du marketing. Ensemble, nous couvrons de vastes domaines informatiques et de développement, ainsi que du marketing et du numérique. De Rails à .net, de la conception graphique à l’interface utilisateur et au référencement, vous bénéficierez de nos connaissances et de notre expertise dans chaque article que nous écrivons dans ce blog.

Previous Post:Bannière Langages de ProgrammationLangages de programmation les mieux payés en 2023 : Top 10
Next Post:Pourquoi faire un audit informatique en entreprise ?Bannière Audit Informatique - Un diagnostic indispensable pour une enterprise

Reader Interactions

Comments

  1. Agence marketing digital Paris

    27/01/2023 at 17:05

    Il faut toujours pouvoir savoir et reconnaitre les failles, merci pour le partage.

Leave a Reply

Your email address will not be published. Required fields are marked *

Sidebar

Déposez CV

Rechercher

Nos meilleurs articles

Bannière Développement de jeu vidéo

Développement de jeux vidéo : Ce qu’il faut savoir

Le processus du RPA (Robotic Process Automation)

La Robotic Process automation, aux frontières du machine learning et de l’IA

Modeles React JS

10 modèles React gratuits que vous pouvez utiliser pour vos projets

smartphone avec l'appli de CB et les textes: iOS, Android et windows

Développer une application mobile pas à pas

Un programmeur en t-shirt 'code master' fait semblant d'utiliser des langages informatiques sur un panneau interactif

Comment se former au métier de développeur informatique ?

Les erreurs courantes en C# à éviter pour exceller en tant que développeur

Tout savoir sur Angular 18

Scrum

Repenser Scrum pour libérer son potentiel

Prompt Engineering

Le Prompt Engineering : L’art de converser avec l’intelligence artificielle

Rust

Rust – Le nouveau pilier de la Data Science

Le guide ultime du développeur Python

Les concepts clés en JavaScript

Les concepts clés en JavaScript pour les développeurs seniors

Categories

  • Blockchain (14)
  • Conseils (58)
  • Design (38)
  • Développement (166)
  • Digital (298)
  • Divers (7)
  • E-commerce (13)
  • Evénements (24)
  • Fiche métier (2)
  • Formation (16)
  • Interviews (35)
  • Marché de l'emploi (69)
  • Marketing (127)
  • Méthodologie (10)
  • Réseaux et Systèmes (33)
  • Web (149)

Nos Categories

Blockchain
Conseils
Méthodologies
Design
Développement 
Digital
E-commerce
Evénements
Formation
Interviews
Marché de l’emploi
Marketing
Réseaux et Systèmes
Web

Candidats

Emploi par région
Emploi par métier
Fiche métiers informatiques
Nous contacter
Vous êtes recruteur ?

A Propos

Conditions générales d’utilisation
Politique de confidentialité
Droit d’accès aux données personnelles (cookies)

Social

Facebook
Twitter
Linkedin

Les Jeudis

© Copyright 2023 LesJeudis. Tous droits réservés.