Meilleures Pratiques de sécurité PHP Ultimes

 guide de sécurité php

Étant donné que PHP est l’épine dorsale de presque tous les sites Web, la sécurité PHP ne doit donc pas être considérée comme négligeable à tout prix. Cependant, les développeurs PHP ont le privilège d’éviter les menaces courantes telles que la falsification de demandes inter-sites, les injections SQL et la falsification de données. Et tout cela est utile à l’aide des fonctionnalités de sécurité intégrées à PHP qui facilitent la protection du site Web par les développeurs.

PHP est considéré comme le langage côté serveur le plus puissant, PHP utilise 80% du web mondial, avec les 10 millions de domaines les plus importants. Pour cette raison elle-même, c’est pour comprendre que PHP vous aidera à vous protéger contre les attaquants.

Sécuriser les applications Web contre toutes sortes de tentatives d’attaque falsifiées est le devoir ultime d’un développeur Web. Vous devez construire vos applications Web suffisamment protectrices pour ne pas avoir de problèmes de sécurité ou d’échappatoires.

PHP est le langage de programmation web côté serveur le plus utilisé au monde. Différentes applications PHP partagent différentes parties de leur code et de leurs scripts avec d’autres applications Web. Dans le cas où le morceau de code partagé est détecté vulnérable, Toutes les applications utilisant ce morceau de code partagé sont mises en danger et considérées comme vulnérables.

Protégez vos applications sur le Cloud

Cloudways offre 2FA, SSL gratuit et des fonctionnalités de sécurité plus avancées sur des serveurs gérés qui protègent votre application.

PHP est le langage de script le plus critiqué en matière de sécurité. Une grande partie des développeurs et des experts en assurance qualité pensent que PHP n’a pas de techniques robustes pour sécuriser les applications. Le verdict a également du terrain car PHP est le langage le plus ancien et le plus largement utilisé pour le développement d’applications Web. Mais depuis longtemps depuis PHP 5.6, nous n’avons pas vu de mises à jour majeures concernant la sécurité et donc le langage fait face à des problèmes de sécurité.

Quelle est la sécurité de PHP

PHP est aussi sécurisé que n’importe quel autre langage majeur. PHP est aussi sécurisé que n’importe quel langage côté serveur majeur. Avec les nouveaux frameworks et outils PHP introduits ces dernières années, il est désormais plus facile que jamais de gérer une sécurité de premier ordre.

Si nous faisons une comparaison PHP est uniformément sécurisé. Rails, Java, Javascript et d’autres langages ont tous eu leurs vulnérabilités au fil des ans. « Si vous trouvez un langage qui n’a pas eu de vulnérabilité d’une forme ou d’une autre, Vous pouvez parfaitement écrire du code sécurisé en PHP.

Problèmes de sécurité dans les CMS PHP

Les CMS populaires comme WordPress, Joomla, Magento et Drupal sont construits en PHP et selon Sucuri, la plupart des vulnérabilités dans les CMS PHP sont apparues au cours de l’année 2017:

  • Les problèmes de sécurité WordPress sont passés de 74% au 3e trimestre de 2016 à 83% en 2017.
  • Les problèmes de sécurité Joomla sont passés de 17 % au 3e trimestre de 2016 à 13,1 % en 2017.
  • Les problèmes de sécurité de Magento ont légèrement augmenté, passant de 6% au 3e trimestre 2016 à 6,5% en 2017.
  • Les problèmes de sécurité Drupal ont légèrement diminué, passant de 2% au 3e trimestre 2016 à 1,6 % en 2017.

 comparaison des infections cms

 comparaison des infections cms

La situation actuelle n’est pas assez bonne, mais grâce aux contributeurs open source, qui s’efforcent de surmonter les problèmes et nous avons vu des changements drastiques en PHP ces derniers temps. PHP 7.x a été lancé l’année dernière avec diverses mises à jour et corrections. La meilleure chose à propos de PHP 7.x concerne les mises à niveau de sécurité qui ont véritablement remanié le protocole de sécurité du langage.

Que Contient Ce Tutoriel De Sécurité PHP ?

Je travaille sur les problèmes de sécurité et de performance de PHP depuis très longtemps, étant très actif dans la communauté PHP en demandant aux meilleurs développeurs les trucs et astuces qu’ils utilisent dans leurs projets en direct. Par conséquent, l’objectif principal de ce tutoriel de sécurité PHP est de vous sensibiliser aux meilleures pratiques de sécurité dans les applications Web PHP. Je vais définir les problèmes suivants et mentionner les solutions possibles pour eux.

  • Mettre à jour PHP régulièrement
  • Cross site scripting (XSS)
  • Attaques par injection SQL
  • Falsification de requête intersite XSRF/CSRF
  • Détournement de session
  • Masquer les fichiers du navigateur
  • En toute sécurité Télécharger des fichiers
  • Utiliser des certificats SSL Pour HTTPs
  • Déployer des applications PHP sur des Clouds

Remarque: veuillez ne pas le considérer comme une feuille de triche complète. Il doit y avoir de meilleures façons et des solutions plus uniques que les développeurs appliqueraient sur leurs applications pour le rendre parfaitement sécurisé.

Meilleures pratiques de sécurité PHP

Lors de la création d’une application web PHP, un ingénieur Web doit se préoccuper des meilleures pratiques de sécurité. Une application Web non sécurisée donne aux pirates la possibilité de prendre des données précieuses, telles que des informations sur les clients ou des détails de carte de crédit. En outre, une violation de données peut avoir un effet extrême sur la validité et les opérations futures de votre organisation.

Mettre à jour PHP régulièrement

Actuellement, la version la plus stable et la plus récente de PHP disponible est PHP 8. Je vous recommande de mettre à jour votre application PHP vers cette nouvelle. Si vous utilisez toujours PHP 5.6 ou 7, vous aurez beaucoup de dépréciations lors de la mise à niveau des applications PHP. Vous devrez également mettre à jour votre code et modifier certaines logiques fonctionnelles comme le hachage de mot de passe, etc. Il existe également des outils disponibles pour vérifier la dépréciation de votre code et vous aider à les migrer. J’ai énuméré quelques outils ci-dessous:

  1. Vérificateur de compatibilité PHP
  2. PHP MAR
  3. Phan

Si vous utilisez PHPStorm, vous pouvez utiliser l’inspection de compatibilité PHP 7, qui vous montrera quel code vous causera des problèmes.

En savoir plus: Hébergement PHP sur Cloudways

Cross-site scripting (XSS)

Cross site scripting est un type d’attaque Web malveillante dans laquelle un script externe est injecté dans le code ou la sortie du site Web. L’attaquant peut envoyer du code infecté à l’utilisateur final alors que le navigateur ne peut pas l’identifier comme un script de confiance. Cette attaque se produit principalement sur les endroits où l’utilisateur a la possibilité de saisir et de soumettre des données. L’attaque peut accéder aux cookies, aux sessions et à d’autres informations sensibles sur le navigateur. Regardons l’exemple d’une requête GET qui envoie des données via une URL:

URL: http://example.com/search.php?search=<script>alert('test')</script>$search = $_GET ?? null;echo 'Search results for '.$search;

Vous pouvez comprendre cette attaque en utilisant htmlspecialchars. En utilisant également ENT_QUOTES, vous pouvez échapper des guillemets simples et doubles.

$search = htmlspecialchars($search, ENT_QUOTES, 'UTF-8');echo 'Search results for '.$search;

Pendant ce temps, les attaques XSS peuvent également s’exécuter via des attributs, des schémas d’URI codés et un codage de code.

En savoir plus: Empêcher XSS dans Laravel

Attaques par injection SQL

L’injection SQL est l’attaque la plus courante dans les scripts PHP. Une seule requête peut compromettre l’ensemble de l’application. Dans une attaque par injection SQL, l’attaquant essaie de modifier les données que vous transmettez via des requêtes. Supposons que vous traitiez directement les données utilisateur dans des requêtes SQL et qu’un attaquant anonyme utilise secrètement différents caractères pour les contourner. Voir la requête SQL mentionnée ci-dessous:

$sql = "SELECT * FROM users WHERE username = '" . $username . "';

Le nom d’utilisateur $peut contenir des données altérées qui peuvent endommager la base de données, y compris la suppression de toute la base de données en un clin d’œil. Alors, quelle est la solution? AOP. Je vous recommande de toujours utiliser des déclarations préparées. PDO vous aide à sécuriser les requêtes SQL.

$id = $_GET ?? null;

La connexion entre la base de données et l’application se fait avec la déclaration ci-dessous:

$dbh = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'dbusername', 'dbpassword');

Vous pouvez sélectionner le nom d’utilisateur en fonction de l’identifiant ci-dessus, mais attendez! Ici, le code SQL ‘GET data’ est injecté dans votre requête. Veillez à éviter un tel codage et utilisez plutôt des instructions préparées:

$sql = "SELECT username, email FROM users WHERE id = ".$id." ;foreach ($dbh->query($sql) as $row) { printf ("%s (%s)\n", $row, $row);}

Maintenant, vous pouvez éviter la possibilité d’injection SQL ci-dessus en utilisant

$sql = "SELECT username, email FROM users WHERE id = :id";$sth = $dbh->prepare($sql, );$sth->execute();$users = $sth->fetchAll();

De plus, une bonne pratique consiste à utiliser ORM comme doctrine ou eloquent, car il y a le moins de possibilité d’y injecter des requêtes SQL.

En savoir plus: Protéger le site Web PHP de l’injection SQL

Falsification de requête intersite XSRF/CSRF

L’attaque CSRF est assez différente des attaques XSS. Dans une attaque CSRF, l’utilisateur final peut effectuer des actions indésirables sur les sites Web authentifiés et peut transférer des commandes malveillantes sur le site pour exécuter toute action indésirable. CSRF ne peut pas lire les données de la demande et cible principalement la demande de changement d’état en envoyant un lien ou des données modifiées dans des balises HTML. Cela peut forcer l’utilisateur à effectuer des demandes de changement d’état telles que le transfert de fonds, la modification de ses adresses e-mail, etc. Voyons cette URL dans laquelle les demandes GET envoient de l’argent à un autre compte:

GET http://bank.com/transfer.do?acct=TIM&amount=100 HTTP/1.1

Maintenant, si quelqu’un veut exploiter l’application Web, il changera l’URL avec le nom et le montant comme ceci

http://bank.com/transfer.do?acct=Sandy&amount=100000

Maintenant, cette URL peut être envoyée par e-mail dans n’importe quel fichier, Image, etc. et l’attaquant peut vous demander de télécharger le fichier

ou de cliquer sur l’image. Et dès que vous faites cela, vous vous retrouvez instantanément à envoyer une énorme somme d’argent que vous ne connaissez jamais.

Détournement de session

Le détournement de session est un type particulier d’attaque Web malveillante dans laquelle l’attaquant vole secrètement l’ID de session de l’utilisateur. Cet ID de session est envoyé au serveur où le tableau associated_SESSION associé valide son stockage dans la pile et accorde l’accès à l’application. Le détournement de session est possible via une attaque XSS ou lorsque quelqu’un accède au dossier sur un serveur où les données de session sont stockées.

Pour empêcher le détournement de session, liez toujours les sessions à votre adresse IP pour:

$IP = getenv ( "REMOTE_ADDR" );

Surveillez-le lorsque vous travaillez sur localhost car il ne vous fournit pas l’IP exacte mais les valeurs de type :::1 ou :::127. Vous devez invalider (désactiver le cookie, désactiver le stockage de session, supprimer les traces) la session rapidement chaque fois qu’une violation se produit et vous devez toujours essayer de ne pas exposer les identifiants en aucun cas.

pour les cookies, la meilleure pratique est de ne jamais utiliser de données de sérialisation stockées dans un cookie. Les pirates peuvent facilement manipuler les cookies, ce qui entraîne l’ajout de variables à votre portée. Supprimez en toute sécurité les cookies comme ceci:

setcookie ($name, "", 1);setcookie ($name, false);unset($_COOKIE);

La première ligne du code garantit que le cookie expire dans le navigateur, la deuxième ligne représente la manière standard de supprimer un cookie (vous ne pouvez donc pas stocker false dans un cookie). La troisième ligne supprime le cookie de votre script.

En savoir plus: Serveur Redis En tant que Gestionnaire de session PHP

Masquer les fichiers du navigateur

Si vous avez utilisé des micro-frameworks de PHP, vous devez avoir vu la structure de répertoire spécifique qui assure le placement correct des fichiers. Les frameworks permettent d’avoir différents fichiers comme les contrôleurs, les modèles, le fichier de configuration (.yaml) etc. dans ce répertoire, mais la plupart du temps, le navigateur ne traite pas tous les fichiers, mais ils sont disponibles dans le navigateur. Pour résoudre ce problème, vous ne devez pas placer vos fichiers dans le répertoire racine mais dans un dossier public afin qu’ils ne soient pas accessibles tout le temps dans le navigateur. Regardez la structure de répertoire du framework Slim ci-dessous:

 structure de répertoire mince

 structure de répertoire mince

Télécharger des fichiers en toute sécurité

Le téléchargement de fichiers est une partie nécessaire de toute application de traitement de données utilisateur. Mais rappelez-vous à certains moments, les fichiers sont également utilisés pour les attaques XSS comme je l’ai déjà expliqué ci-dessus dans l’article. Pour revenir aux bases, utilisez toujours la requête POST dans le formulaire et déclarez la propriété enctype= »multipart/form-data » dans la balise < form >. Validez ensuite le type de fichier en utilisant la classe finfo comme ceci:

$finfo = new finfo(FILEINFO_MIME_TYPE);$fileContents = file_get_contents($_FILES);$mimeType = $finfo->buffer($fileContents);

Les développeurs peuvent créer leurs propres règles de validation de fichiers personnalisées et ultra-sécurisées, mais certains frameworks comme Laravel, Symfony et codeigniter ont déjà des méthodes prédéfinies pour valider les types de fichiers.

Regardons un autre exemple. Le HTML du formulaire devrait être comme ceci:

<form method="post" enctype="multipart/form-data" action="upload.php"> File: <input type="file" name="pictures" multiple="true"> <input type="submit"></form>

Et télécharger.php contient le code suivant:

foreach ($_FILES as $key => $error) { if ($error == UPLOAD_ERR_OK) { $tmpName = $_FILES; $name = basename($_FILES); move_uploaded_file($tmpName, "/var/www/project/uploads/$name"); }}

Déclarer correctement UPLOAD_ERR et basename() peut empêcher les attaques de traversée de répertoires, mais peu d’autres validations – comme la taille du fichier, le renommage du fichier et le stockage des fichiers téléchargés dans un emplacement privé – sont également nécessaires pour renforcer la sécurité des applications.

En savoir plus: Téléchargement d’images et de fichiers en PHP

Utilisez des certificats SSL Pour HTTPS

Tous les navigateurs modernes comme Google Chrome, Opera, Firefox et autres, recommandent d’utiliser le protocole HTTPS pour les applications Web. HTTPs fournit un canal d’accès sécurisé et crypté pour les sites non fiables. Vous devez inclure HTTPS en installant un certificat SSL sur votre site Web. Il renforce également vos applications Web contre les attaques XSS et empêche les pirates de lire les données transportées à l’aide de codes. Cloudways fournit des certificats SSL gratuits en un clic qui sont valides pendant 90 jours et vous pouvez facilement les révoquer ou les renouveler en un clic. Vous pouvez suivre les guides de configuration des certificats SSL dans vos applications PHP, WordPress, Magento et Drupal.

Déployer des applications PHP sur des Clouds

L’hébergement est l’étape finale et primordiale pour toute application Web, car vous créez toujours le projet sur des serveurs PHP locaux et les déployez sur des serveurs live qui offrent un hébergement partagé, cloud ou dédié. Je recommande toujours d’utiliser un hébergement cloud comme DigitalOcean, Linode, AWS. Ils sont rapides, sûrs et sécurisés pour tout type de site Web et d’application. Ils fournissent toujours une couche sécurisée pour prévenir les attaques DDOS, la force brute et le phishing qui sont très préjudiciables pour les applications Web.

Vous pourriez aussi aimer : Les pièges de l’Hébergement partagé Laravel pour Vos Projets

Pour déployer des applications PHP sur des serveurs cloud, vous devez avoir de bonnes compétences Linux pour créer de puissantes piles web comme LAMP ou LEMP, ce qui vous coûte souvent du temps et du budget pour les professionnels de Linux. Au lieu de cela, la plate-forme d’hébergement PHP et MySQL gérée par Cloudways vous offre un moyen facile de déployer des serveurs avec Thunderstack en quelques clics sur les fournisseurs de cloud mentionnés ci-dessus. L’Orage aide votre application PHP à être complètement sécurisée contre diverses attaques malveillantes et garantit des performances optimisées.

En savoir plus : L’Environnement de transfert Cloudways amélioré Est Maintenant disponible pour Tous les utilisateurs

Configuration de la racine du document

La racine du document pour les applications PHP sur n’importe quel serveur doit être définie sur var/www/html afin que les utilisateurs puissent accéder à votre site Web via le navigateur. Mais dans certains cas, lorsque vous développez des API avec des frameworks tels que Laravel, Symfony et Slim, vous devez mettre à jour la racine web dans le dossier `/public.

/ public sert la sortie d’une application similaire à un simple site Web PHP avec index.fichier php. Le but de définir la racine web sur var /www/ html / public est de masquer les fichiers sensibles comme.htaccess et.env qui contient les variables d’environnement et les informations d’identification des API de base de données, de messagerie et de paiement.

De plus, des frameworks comme Laravel, Symfony recommandent de ne pas déplacer tous vos fichiers vers le dossier racine, mais de créer une belle structure de répertoires pour enregistrer des fichiers associés tels que la vue, les modèles et les contrôleurs est une approche plus raisonnable.

Consignez toutes les erreurs et Masquez-les en production

Une fois que vous avez développé le site Web et déployé sur le serveur en direct. La première chose à faire est de désactiver l’affichage des erreurs, car les pirates pourraient obtenir les mêmes informations précieuses à partir des erreurs. Définissez ce paramètre dans votre php.fichier ini:

display_errors=Off

Maintenant, après avoir désactivé l’affichage, consignez les erreurs PHP dans un fichier spécifique pour les besoins futurs:

log_errors=Onerror_log=/var/log/httpd/php_scripts_error.log

De toute évidence, vous pouvez changer le nom du fichier à votre guise.

Vous pourriez aussi aimer: Simplifier la journalisation des erreurs Laravel avec l’intégration de la barre de contrôle PHP

Liste blanche IP publique pour Mysql

Lorsque vous travaillez avec des applications PHP, vous devez souvent configurer la base de données mysql dans des scripts internes ainsi que dans des clients mysql. La plupart des clients sont utilisés pour configurer une connexion à distance MySQL qui a besoin de l’adresse IP ou d’un autre nom d’hôte fourni par le serveur d’hébergement pour créer une connexion.

L’adresse IP publique de la connexion Mysql distante doit être sur la liste blanche de votre serveur d’hébergement afin qu’un utilisateur anonyme ne puisse pas accéder à la base de données. Par exemple, sur Cloudways, vous pouvez mettre IP sur liste blanche comme:

Maintenant, vous pouvez connecter SQLyog ou Mysql workbench pour travailler à distance avec la base de données.

Q : Comment tester la sécurité PHP ?

R: Il existe peu d’outils de scanner de code disponibles sur le marché qui peuvent vous aider à analyser la qualité et la sécurité du code de vos applications PHP. PHP Malware Finder (PMF) est l’un des meilleurs outils de test de sécurité qui aide à trouver des codes malveillants dans les fichiers. Vous pouvez également utiliser RIPS, qui est un outil d’analyse de code populaire qui aide à trouver des vulnérabilités de code en temps réel.

Q : Comment assurer la sécurité de la base de données PHP ?

R : Pour assurer la sécurité de la base de données, vous devez toujours utiliser des pratiques telles que la protection par injection SQL, les pare-feu de base de données, le chiffrement régulier des données et autres.

Q: Quelle est une méthode sécurisée pour crypter un mot de passe en PHP?

A: Md5 est l’acronyme de Message Process 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 devient répétitif de la décoder. Md5 et sha1 sont exceptionnellement utiles lors du stockage de mots de passe dans la base de données.

Q : Qu’est-ce qu’une vulnérabilité PHP ?

R: L’injection d’objets PHP est une vulnérabilité au niveau de l’application qui semble permettre à un assaillant d’effectuer diverses sortes d’attaques nocives, telles que l’Injection de Code, l’injection SQL, la Traversée de chemin et le Déni de service.

Une attaque DDoS compromet plusieurs attaques de systèmes informatiques. Les cibles habituelles sont les serveurs, les sites Web ou d’autres ressources réseau.

Cela se produit lorsque l’entrée fournie par l’utilisateur n’est pas gérée avant d’être passée à la fonction PHP unserialize(). Puisque PHP autorise la sérialisation d’objets, les agresseurs peuvent passer des chaînes sérialisées ad hoc à un appel unserialize() sans défense.

C’Est fini !

Eh bien, les meilleures pratiques de sécurité PHP sont un sujet très vaste. Les développeurs du monde entier ont tendance à développer différents cas d’utilisation pour sécuriser les applications Web. Alors que de nombreuses entreprises exécutent différents programmes de primes pour découvrir les failles de sécurité et les vulnérabilités de leurs applications et récompenser ainsi les experts en sécurité qui signalent des failles critiques dans les applications. Cet article couvre les problèmes de sécurité PHP de base, pour vous aider à comprendre comment sécuriser vos projets PHP contre différentes attaques malveillantes. Je vais également écrire sur quelques autres trucs et astuces de sécurité PHP à l’avenir. Jusque-là, vous pouvez apporter vos réflexions et vos pratiques de sécurité dans la section commentaires ci-dessous.

Partagez votre opinion dans la section commentaire. COMMENTEZ MAINTENANT

Partagez Cet Article

Avis client à

 » Cloudways hosting offre l’un des meilleurs services à la clientèle et une vitesse d’hébergement »

Sanjit C

Shahroze Nawaz

Shahroze est un Gestionnaire de communauté PHP chez Cloudways – Une Plate-forme d’Hébergement PHP gérée. Outre sa vie professionnelle, il aime le cinéma et les voyages. Vous pouvez lui envoyer un e-mail à

Connectez-vous sur: Forum de la communauté Twitter

Leave a Reply

Votre adresse e-mail ne sera pas publiée.