French

Un guide pas à pas sur la sécurité PHP

Updated on: October 4, 2021

Un guide pas à pas sur la sécurité PHP

En 2020, plus de 79% du langage côté serveur était PHP. La plupart d’entre eux sont des systèmes de gestion de contenu, notamment des sites de commerce électronique et WordPress. Comme il s’agit d’un langage de programmation très utilisé pour les sites Web, y compris Facebook et Wikipedia, il est constamment menacé d’attaques et d’exploitations. La sécurité PHP est devenue très importante pour protéger les sites Web et les plates-formes contre les cyber-attaques et les piratages.

En raison de l’avancement des cyberattaques et techniques de piratage, les risques d’attaques sont devenus plus grands. Pour ajouter à cela, PHP est également fragile. Un petit bogue ou une erreur de codage peut rendre votre Site Web PHP vulnérable et sujettes aux attaques.

Après avoir déployé tant d’efforts pour construire un Site Web PHP piraté est la dernière chose dans l’esprit de quiconque. Mais pour vraiment rendre votre pile technologique PHP impénétrable et inattaquable, vous devez assurer une sécurité à toute épreuve.

Pour vous aider, nous avons rassemblé ce guide de sécurité PHP complet. Ce guide vous aidera à identifier Menaces de sécurité PHP et des moyens de renforcer la sécurité de votre site Web. Il dispose également de mesures de sécurité efficaces que vous pouvez suivre pour garder sa sécurité intacte.

Tout cela dans une minute, mais d’abord, regardons ces Statistiques de piratage PHP.

Quelques statistiques sur la sécurité PHP

  • WordPress utilise PHP comme langage de script. Plus de 35% des sites Web utilisent WordPress et il possède l’un des plus grands nombres de vulnérabilités. Rien qu’en 2018, WordPress avait 542 vulnérabilités.
  • Les techniques d’attaque les plus courantes sur un site Web basé sur PHP sont les attaques par injection SQL et XSS.
  • Selon un rapport, les pirates volent environ 75 enregistrements par seconde.
  • En 2019, il y a eu une attaque toutes les 39 secondes avec plus de 30000 sites Web piratés chaque jour.

Menaces et correctifs de sécurité PHP

Au fil des ans, les pirates ont inventé des moyens intelligents de tromper et de contourner chaque petite fonctionnalité d’un site Web PHP. Certaines des attaques les plus populaires contre les pirates sont:

1. Injection SQL

Injection SQL est une forme d’attaque très courante qui représente environ les deux tiers de toutes les attaques Web. Avec un code incorrect ou inefficace conduisant à une attaque par injection SQL, une violation de données peut se produire, entraînant la fuite de détails importants tels que les détails de la carte de crédit et les informations d’identification, pour n’en nommer que quelques-uns. Cela peut également compromettre un serveur Web entier. Voici un exemple d’extrait de code non sécurisé:

PHP security

Un attaquant peut envoyer une requête qui sera exécutée avec la requête, comme ci-dessous:

php security

La requête ci-dessus modifiera le code comme suit:

php security

En utilisant des scripts similaires au code ci-dessus, les attaquants peuvent accéder à toutes les tables de données et informations sensibles.

La solution à cela est d’utiliser des requêtes SQL paramétrées et des objets de données PHP (PDO). L’utilisation de requêtes paramétrées permettra à la base de données de différencier les données des parties de requête. Ainsi, il peut alors traiter les deux parties séparément. PDO est inclus dans PHP version 5.1 et ultérieure, et vous pouvez l’utiliser pour exécuter des extraits préparés dans votre code.

Pour protéger davantage votre site Web, vous pouvez procéder comme suit:

  • Filtrer vos données: avec des filtres appropriés pour vos données d’entrée, vous pouvez empêcher tout code suspect ou malveillant d’entrer dans votre système
  • Utilisation de guillemets dans vos données: si cela est autorisé dans votre base de données, utilisez des guillemets dans toutes les valeurs des instructions SQL
  • Utilisez des caractères d’échappement: dans certains cas, des données authentiques peuvent interférer avec les formats d’instructions SQL. Pour éviter cela, vous pouvez utiliser des fonctions telles que mysql_escape_string ()

2. Traversée du répertoire

Dans cette attaque, on peut afficher ou exécuter des fichiers et des dossiers cruciaux qui devraient être inaccessibles à tout le monde sauf aux administrateurs. Ces fichiers peuvent résider en dehors des dossiers racine et avec des autorisations de fichier incorrectes ou une erreur de codage, ces fichiers peuvent être vulnérables à un accès non autorisé. L’exemple de code ci-dessous permettra les requêtes qui peuvent accéder aux fichiers:

https://d37oebn0w9ir6a.cloudfront.net/account_5336/directorytraversal1_f56e3627a3c12f3632abe93b0303fac5.PNG

Si un attaquant entre “/ etc / passwd” comme argument, il retournera ce fichier car il est accessible à tous. Pour éviter cela, vous devez appliquer les autorisations appropriées en fonction du statut de l’utilisateur.

3. Scripts intersites (attaques XSS)

XSSles vulnérabilités sont très courantes et cela rend cette attaque largement utilisée. Dans cette attaque, des scripts côté client sont insérés dans la sortie d’une page Web, puis ces scripts sont exécutés sur le système de l’utilisateur. Les attaquants utilisent cette attaque pour voler des informations, des informations d’identification ou des cookies, pour n’en nommer que quelques-uns. Les attaques XSS sont également courantes sur les sites Web qui affichent des données externes.

L’extrait de code vulnérable suivant peut être exploité pour lancer une attaque XSS:

https://d37oebn0w9ir6a.cloudfront.net/account_5336/xssattack1_edf5361b882d9520258ac72327c570a3.PNG

Lorsque l’attaquant passe des codes tels que <script> alert («XSS»); </script> à cette page Web, il sera exécuté et affichera «XSS». Cela montre comment des codes malveillants externes peuvent être injectés et exécutés pour causer des dommages.

Vous pouvez empêcher de telles attaques en suivant les étapes ci-dessous:

  • Filtrer toutes les données externes: si vous filtrez toutes les données entrantes et sortantes de votre site Web, vous pouvez arrêter la plupart des attaques XSS
  • Fonctions existantes: PHP a quelques fonctions que vous pouvez utiliser telles que htmlentities (), utf8_decode () et strip_tags (). L’utilisation de ces fonctions vous fera gagner du temps et, comme elles sont intégrées, elles auront moins de vulnérabilité
  • Utilisation de conventions de dénomination strictes: l’utilisation d’une convention de dénomination stricte aidera à faire la distinction entre les données filtrées et non filtrées, ce qui sera bénéfique dans la phase de développement

4. Falsification de demandes intersites

Attaques de falsification de requêtes intersites se font du côté de l’utilisateur et exploitent la confiance que les pages Web ont sur les utilisateurs. Les utilisateurs disposant de privilèges plus élevés font face aux menaces les plus élevées. Cette attaque est moins populaire que d’autres et est donc plus dangereuse. La protection de votre site Web contre de telles attaques est également plus compliquée que celles mentionnées ci-dessus. Lorsque les utilisateurs se connectent à un site Web, ils reçoivent certains privilèges tels que l’accès à des pages non disponibles pour d’autres. En utilisant ces privilèges, les attaquants peuvent concevoir des requêtes HTTP qui sont ensuite exécutées par la page Web. Les attaquants peuvent utiliser cette technique pour accéder à la base de données ou extraire des informations importantes.

Les étapes de sécurité PHP ci-dessous vous aideront à prévenir de telles attaques:

  • Utiliser POST au lieu de GET dans tous les formulaires: vous pouvez utiliser POST dans les formulaires qui le permettent, en particulier ceux qui peuvent effectuer des actions
  • Utilisation de HTTPS: L’utilisation de HTTPS est devenue la nouvelle norme et à juste titre. HTPPS crypte la connexion entre votre site Web et l’utilisateur. Ce n’est peut-être pas la solution unique pour empêcher les attaques CSRF, mais cela renforce votre sécurité PHP et protège votre site Web contre une gamme d’autres attaques.
  • Ajout de mécanismes d’authentification par défi-réponse de base: une façon de vérifier l’authenticité des formulaires consiste à masquer un attribut de formulaire dans chaque formulaire. Et remplissez l’attribut avec une valeur cryptique générée aléatoirement qui peut être vérifiée et mise en correspondance pour garantir la sécurité du formulaire

5. Stockage des mots de passe

Avec l’augmentation des cas de vol d’informations d’identification et de vidage de données sur le Dark Web, le stockage sécurisé d’informations d’identification telles que les mots de passe est devenu beaucoup plus important. Les attaquants peuvent exploiter des vulnérabilités telles que l’injection SQL ou les attaques XSS et accéder aux mots de passe stockés sur le site Web. En cas de violation de la sécurité, il est important de s’assurer que les attaquants sont incapables de décoder les mots de passe et de causer des dommages supplémentaires. Il existe deux façons importantes de stocker des mots de passe en toute sécurité, en utilisant un algorithme de hachage et du sel.

L’algorithme de hachage le plus courant est MD5 et c’est le plus rapide. Cependant, il est facile et rapide de craquer. Vous pouvez utiliser la fonction password_hash () au lieu de MD5, car elle est plus sécurisée. Cette fonction génère un hachage de soixante caractères basé sur BCRYPT (algorithme CRYPT_BLOWFISH). Il accepte trois paramètres: le mot de passe, l’algorithme de hachage (utilise par défaut BCRYPT) et une valeur facultative telle que le coût. Vous pouvez vérifier le mot de passe haché en utilisant password_verify ().

https://d37oebn0w9ir6a.cloudfront.net/account_5336/passwordhash1_2dc466e6d459f73ccbf9c8c8f666f245.PNG

Salt est une chaîne aléatoire qui est ajoutée au mot de passe avant de le hacher. Un sel long et aléatoire rendra effectivement les méthodes de craquage inefficaces. Quelques autres conseils de sécurité PHP pour garantir que les mots de passe sont stockés en toute sécurité:

  • Comme mentionné ci-dessus, évitez d’utiliser des algorithmes de hachage basiques et faibles
  • Si vous utilisez du sel, ne réutilisez pas de sels faibles. Password_hash () peut sélectionner des sels forts aléatoires par défaut
  • Trouvez un juste milieu entre le coût et la force des algorithmes de hachage. Avoir une valeur de coût plus élevée entraînera des hachages plus forts, mais cela pourrait affecter les performances du serveur

Guide connexe – Sels PHP et hachage de mot de passe

6. Détournement de session

Détournement de session Les attaques sont la forme la plus courante d’attaques de session. Cette attaque comprend l’accès à la session d’un utilisateur sans méfiance, puis le lancement d’autres attaques. Une fois le piratage réussi, l’attaquant peut effectuer toutes les tâches pour lesquelles l’utilisateur d’origine avait l’autorisation. Dans le cas où la session de l’utilisateur devait se connecter à ses comptes bancaires, les attaquants peuvent effectuer des virements ou reprendre entièrement le compte. Cette attaque peut également fournir un accès à des réseaux à l’échelle de l’entreprise, au cas où la session appartient à un employeur d’une organisation.

Cette attaque peut être effectuée en ayant simplement l’identifiant de session. Pour éviter les attaques de piratage de session, les sites Web doivent vérifier quelques détails dans la requête HTTP et les analyser pour identifier une session authentique. Les attaquants trompent le site Web en transmettant de telles informations qui sont ensuite interprétées comme authentiques et permettent à la session de se poursuivre. Un moyen efficace d’arrêter de telles attaques est de rechercher de tels champs qui seront difficiles à générer pour l’attaquant. Ces champs peuvent ensuite être utilisés pour vérifier l’authenticité de la session. Des champs tels que user-agent sont difficiles à répliquer par un attaquant. En outre, vérifier les détails de l’emplacement et les informations du navigateur et les faire correspondre avec les données historiques peut fournir des informations sur la session en cours.

Afin de ne pas affecter l’expérience utilisateur, si, dans le doute, les sites Web peuvent demander une entrée de mot de passe pour s’authentifier. Les utilisateurs apprécieront la précaution supplémentaire et le système ne bloquera pas un utilisateur authentique.

7. Fixation de session

Lors de la fixation de session, l’attaquant envoie à l’utilisateur un identifiant de session valide, puis l’utilise pour accéder au site Web. L’attaquant crée une session puis attend qu’un utilisateur utilise l’ID de session de l’attaquant pour se connecter au site Web. Ensuite, le site Web considérera la session comme authentique et permettra à l’attaquant d’utiliser cette session sans aucune interruption.

Si un site Web extrait des identifiants de session à partir d’URL ou de formulaires, il est facile pour les attaquants d’utiliser cette méthode d’attaque. Dans ce cas, l’utilisateur n’a qu’à cliquer sur le lien, et le site Web ajoutera alors l’ID de session de l’attaquant à l’utilisateur. Cela peut également être fait avec les cookies en le définissant sur l’ID de session de l’attaquant.Il existe deux façons principales d’arrêter de telles attaques:

  • Utilisation des cookies:Bien que cette méthode soit vulnérable à cette attaque, elle est beaucoup plus difficile pour l’attaquant que pour les sites Web acceptant l’ID de session des variables POST ou GET. De plus, vous devrez protéger les cookies des attaques XSS en utilisant les étapes mentionnées ci-dessus
  • Régénération d’identifiant de session:Une fois que l’utilisateur s’est connecté, le site Web peut être configuré pour fournir à l’utilisateur un nouvel identifiant. Cela garantira que même si l’utilisateur utilisait l’ID de l’attaquant pour se connecter, il sera détaché une fois que l’utilisateur recevra le nouvel ID. Ainsi, l’attaquant n’aura pas accès une fois que l’utilisateur s’est connecté

Données de session exposées

Si vous utilisez un serveur partagé, vos sessions peuvent être stockées dans un magasin de sessions partagé. Si tel est le cas avec votre serveur, les sessions de votre site Web sont vulnérables à un accès non autorisé. En cela, avec le code ci-dessous, les attaquants peuvent facilement accéder à la session stockée dans le dossier «/ tmp» par défaut:

https://d37oebn0w9ir6a.cloudfront.net/account_5336/sessiondataexp1_4ddc07de2eaaaf98c11e755584705ce3.PNG

Il s’agit d’une simple requête PHP qui peut utiliser les privilèges du serveur pour accéder et lire les fichiers. Pour éviter cela, vous pouvez utiliser les directives safe_mode mais comme cela ne fonctionne que pour PHP, les attaquants peuvent utiliser d’autres langages pour ce faire. Une meilleure solution consiste à éviter d’utiliser un magasin de sessions partagé. Stockez les données dans une base de données dotée d’informations d’identification d’accès uniques liées à votre compte. Pour ce faire, vous pouvez utiliser la fonction session_set_save_handler () pour remplacer la gestion par défaut des sessions par PHP par vos propres fonctions.

Guide connexe – Clickjacking en PHP

Attaques XML

Pour cette attaque, les attaquants exploitent la fonction d’analyse des entrées XML. Si l’analyseur XML est faiblement configuré, il analysera une entrée XML en référence à des sources externes. Il existe deux vulnérabilités majeures qui peuvent être exploitées: XML External Entity et XPath Injection. Ces attaques forment une base pour d’autres attaques telles que les exploits d’inclusion de fichiers distants.XPath Injection est similaire à SQL Injection mais est applicable aux documents XML. Comme ce type d’attaque est rare, il y a comparativement moins de fonctions et de mécanismes intégrés pour s’en protéger. Vous pouvez utiliser un ensemble de caractères sur liste blanche pour vous assurer que les caractères indésirables ou spéciaux ne sont pas acceptés.

https://d37oebn0w9ir6a.cloudfront.net/account_5336/xmlattack1_1f1b4d40555700d2dff45a4ed45235da.PNG

Conseils et astuces de sécurité PHP

La sécurité est un élément essentiel du développement et, tout comme les attaques ont évolué au fil du temps, la sécurité doit également évoluer pour suivre le rythme. La sécurité d’un site Web n’est pas seulement importante pour le propriétaire du site Web, mais également pour les utilisateurs qui risquent leurs informations en cas de cyber-attaques. Nous devons comprendre quelques points concernant la sécurité pour nous permettre de prendre les mesures appropriées:

  • La sécurité n’est pas une caractéristique: il n’y a pas de réponse unique pour savoir si un site Web est sécurisé ou non. La sécurité est en constante évolution et il y a toujours une chance qu’une attaque se produise. Une évaluation et des mises à jour régulières sont nécessaires pour maintenir la sécurité PHP à jour et se protéger contre les nouvelles méthodes d’attaques
  • Sécurité et dépenses: les niveaux de sécurité de base protégeront votre site Web contre la plupart des attaques. Cependant, si votre site Web gère des informations de grande valeur, vous devrez dépenser plus pour obtenir une sécurité plus avancée, car la menace me nivelle plus. Pendant la phase de développement, vous devrez comptabiliser les dépenses de sécurité en fonction de votre site Web et de la perception des menaces.
  • Sécurité et convivialité: la commodité d’utiliser votre site Web est très importante pour les utilisateurs. Très souvent, trop de points de contrôle de sécurité peuvent entraver la convivialité de votre site Web. Les demandes de connexion multiples, les délais d’expiration de session rapides et les authentifications multiples peuvent être considérés comme des obstacles par les utilisateurs. Il n’existe pas de protocole de sécurité unique. La sécurité doit être déterminée en fonction de divers facteurs tels que l’application ou les informations traitées. L’utilisabilité et la sécurité doivent être équilibrées pour une expérience utilisateur exceptionnelle et des niveaux de sécurité suffisants
  • La sécurité dans le cadre de la conception: la sécurité fait partie intégrante d’un site Web. Le développement doit se faire en prenant en compte la sécurité afin de s’assurer que la sécurité est présente à tous les niveaux de votre site web

Comme indiqué ci-dessus, la sécurité PHP est toujours menacée, mais elle peut être abordée si nous implémentons quelques protocoles de sécurité essentiels et suivons les directives. Voici quelques conseils de sécurité qui vous aideront à renforcer la sécurité PHP:

Validation des entrées

Pour la sécurité PHP, la validation des données côté client ne suffit pas. Il peut être facilement percé, par exemple, si un attaquant supprime un JavaScript du code source d’un site Web puis soumet un formulaire sans aucune vérification, il ne sera pas détecté s’il n’y a pas de validation côté serveur. Cela ouvre la voie à des attaques telles que les attaques SQL Injection, XSS ou CSRF. La validation côté utilisateur et côté serveur est essentielle pour la sécurité PHP.

Liste noire

Liste noire peuvent être contournés par les attaquants par des méthodes d’essai et d’erreur. Il ne protège pas toujours contre les entrées malveillantes, mais dans certains cas, il peut protéger contre les méthodes d’attaque connues ou courantes. Vous pouvez mettre sur liste noire les chaînes courantes utilisées par les attaquants ou les caractères spéciaux connus pour être dangereux.

Recherche

Dans la phase de développement, la recherche de bogues ou de menaces de sécurité est utile car nous rencontrons plusieurs méthodes et solutions. Cependant, copier-coller ces codes n’est pas une bonne idée. Votre site Web peut être différent de celui de la solution. En outre, ils peuvent être obsolètes et vous exposez tout votre serveur de site Web à des risques. Si vous copiez des codes à partir de plusieurs sources, il est possible que tous les extraits de code ne fonctionnent pas ensemble et les relier nécessitera un effort considérable. La recherche aide à répondre à de nombreuses questions, cependant, l’utiliser comme source de compréhension est une meilleure option que la copie de codes.

Mots de passe forts

Cela ne peut pas être assez souligné. Une grande partie des attaques est possible en raison d’informations d’identification faibles ou facilement cassables. UNE mot de passe fort peut être alphanumérique avec des caractères minuscules et majuscules. Une autre option consiste à utiliser des phrases car il faudra beaucoup de temps et de puissance de calcul pour déchiffrer de tels mots de passe. Assurez-vous également que tous les mots de passe par défaut sont modifiés, à la fois par les utilisateurs et les administrateurs. Aidez vos utilisateurs à utiliser un mot de passe plus fort en leur faisant prendre conscience de son importance et des directives qu’ils peuvent suivre.

Authentification multifacteur

L’authentification à plusieurs niveaux est devenue la nouvelle norme de sécurité. Dans ce cas, les attaquants ne pourront pas causer de dommages s’ils ont les informations d’identification car il faudra un champ supplémentaire tel que OTP (mots de passe à usage unique) pour se connecter. Dans l’authentification à 2 facteurs, les utilisateurs devront entrer un code supplémentaire après avoir utilisé leurs informations d’identification. Pour surmonter cela, les attaquants auront besoin des informations d’identification ainsi que du contrôle de l’appareil recevant OTP.

Guide connexe – Autorisations de fichiers PHP

Filtrage des données

Un filtrage approprié des données protégera votre site Web contre les extraits de code malveillants et les attaques par injection de code. Il existe plusieurs façons d’activer un filtrage efficace des données. Inclure la méthode signifie avoir un seul module dédié à la sécurité qui est placé au début de tous les scripts qui sont accessibles au public. Plusieurs points de contrôle et protocoles de sécurité peuvent être inclus. Pour filtrer les données, vous pouvez utiliser une approche de liste blanche et inclure plusieurs combinaisons de caractères et de chaînes.

Utiliser un pare-feu

Un pare-feu est une protection complète pour votre site Web. Il filtre toutes les données et demandes indésirables et malveillantes pour atteindre votre site Web. Un pare-feu puissant comme Astra offrira une protection complète contre les attaques telles que l’injection SQL, les attaques DDoS et les logiciels malveillants, pour n’en nommer que quelques-unes.

Chez Astra, nous disposons d’outils intelligents et efficaces et d’une expertise en sécurité pour vous offrir une protection complète contre toutes les cybermenaces. Le tableau de bord et les rapports vous tiendront au courant de tout ce qui se passe avec votre site Web.

Comment Astra Web Application Firewall protège votre site Web

Sécurité PHP Les conseils répertoriés dans ce guide vous aideront à protéger votre site Web et à garantir la sécurité des données de votre site Web. La sécurité est dynamique et en constante évolution, donc rester à jour avec tous les derniers développements vous aidera à protéger votre site Web deattaques avancées. L’utilisation d’un service de sécurité vous aidera dans ce domaine sans aucun problème. Laisser votre sécurité PHP à un expert comme Astra est probablement une bonne idée. La création d’un site Web nécessite beaucoup d’efforts et de travail, et sa protection est une tâche difficile mais importante. Avec une bonne compréhension et des informations précises, vous pouvez tenir les attaquants à distance.

Ankit Pahuja

B2B cybersecurity marketing lead with years of experience in SEO, performance marketing, email marketing, lead generation, web analytics & marketing automation. Ankit is an avid speaker and has delivered various talks in top companies, early-age startups, and online events.
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Inline Feedbacks
View all comments

Psst! Hi there. We’re Astra.

We make security simple and hassle-free for thousands
of websites and businesses worldwide.

Our suite of security products include a vulnerability scanner, firewall, malware scanner and pentests to protect your site from the evil forces on the internet, even when you sleep.

earth spiders cards bugs spiders

Made with ❤️ in USA France India Germany