Améliorer la sécurité de nos applications avec PHP

Table des matières
PHP a émergé comme un langage polyvalent qui nous permet de manipuler les données saisies via un formulaire HTMLBien sûr, dans sa constitution, il y a plus d'outils et de capacités que cela.
La polyvalence et la facilité d'utilisation en font l'un des langages les plus utilisés dans le monde pour les projets Web qui vont des simples formulaires de contact à la base de grandes applications au début telles que Facebook.
Le problème avec la polyvalence et la facilité d'utilisation est que le développeur n'est pas obligé d'écrire du code sécurisé, mais avec des fonctionnalités très peu sécurisées, le code fonctionnera parfaitement, et c'est de là que viennent les problèmes.
La sécurité des applications Web est quelque chose que vous n'avez pas dès le départ dans PHPCependant, cela n'en fait pas un langage non sécurisé, puisque la sécurité correspond à un ensemble de techniques et de styles de travail qu'un programmeur doit connaître pour les appliquer à ses scripts.
CadresIl est vrai qu'avec l'apparition de cadres De nombreuses fonctionnalités de sécurité sont incluses par défaut, mais tous les développeurs n'ont pas utilisé un cadre dans des applications plus anciennes et il est possible que pour certaines fonctions cadre être un excès.
Les clés pour sécuriser nos applications avec PHP Ce sont : contrôler et affiner les données que l'utilisateur saisit dans le formulaire, vérifier l'origine des demandes HTTP que notre application reçoit, et enfin éviter l'exécution directe d'instructions via des formulaires.
Il y a une règle dans la programmation et elle est universelle, c'est-à-dire qu'elle ne s'applique pas seulement aux PHPC'est que toutes les données qui ne sont pas générées par l'application sont potentiellement malveillantes, cela signifie que si ce n'est pas quelque chose qui est un résultat que nous avons programmé, nous ne pouvons pas faire confiance.
Ce principe s'applique aux valeurs de formulaire, fichiers, Base de données, donc une première étape pour améliorer notre sécurité consiste à filtrer les données si nous devons interagir avec ces éléments.
Nous allons énumérer quelques-unes des meilleures pratiques que nous pouvons appliquer lorsque nous filtrons les données saisies dans notre formulaire :
Utiliser des listes de valeurs autoriséesAvec cette pratique, nous savons que si les données qui passent par le formulaire ne passent pas par notre liste de valeurs autorisées et sûres, elles ne doivent pas être traitées, à ce stade, un message doit être envoyé à l'utilisateur pour corriger ses données.
Ne jamais corriger les données invalidesIl peut sembler tentant de créer un système très intelligent qui corrige les données avec des incohérences, mais à long terme, cela peut nous apporter des problèmes et des vulnérabilités, c'est pourquoi si nous détectons quelque chose d'irrégulier, nous ne devons pas le traiter.
Utiliser la convention de nommageAvec cette pratique, nous pouvons distinguer les données et valeurs sûres de ces données et valeurs saisies par l'utilisateur, avec cela nous renforcerons dans la programmation l'utilisation des premières pour le traitement.
Il y a deux types de filtrage que nous pouvons faire, le premier est celui des valeurs que nous connaissons et le second des valeurs que nous ne connaissons pas.
Le premier C'est très facile à faire, nous n'avons qu'à effectuer des routines avec des listes d'éléments connus et à les comparer, cependant cela est lourd et difficile à réaliser dans des applications plus importantes. Le deuxième Cela implique de créer des routines qui évaluent la structure de la valeur et si elle correspond à celle que nous considérons comme sûre, nous la laissons passer au traitement, sinon nous lançons une erreur, étant de nature dynamique, c'est le format recommandé.
Voyons ci-dessous un exemple de code du premier type de filtrage :
Dans le code suivant, nous verrons comment nous créons un formulaire qui a un élément sélectionner Pour que l'utilisateur sélectionne une couleur, comme l'utilisateur n'a pas à écrire les données à saisir directement, nous pouvons tomber dans l'erreur de ne pas valider l'information, mais cela signifie seulement que nous avons une faille de sécurité puisqu'avec un formulaire qui s'applique les mêmes noms, nous pouvons recevoir des informations potentiellement dangereuses.
C'est pourquoi une fois la valeur du formulaire envoyée par PUBLIER, notre script évalue les valeurs possibles, et dans le cas où il s'agit de l'une des valeurs attendues, nous le transmettons à notre tableau de valeurs sûres comme nous le voyons ci-dessous.

Avec cela, nous avons résolu le problème de manière simple, mais si la liste au lieu d'avoir trois couleurs en avait eu cent, l'histoire de la simplicité aurait été différente.
Dans l'exemple suivant nous validerons dynamiquement un champ saisi par l'utilisateur de manière appropriée, pour cela nous devons utiliser expressions régulières et ainsi éviter la saisie de caractères mettant en péril notre traitement, évaluer également la taille de la saisie et ainsi éviter un débordement ou surcharge de notre type de données dans le traitement du programme. Voyons le code dans l'image :

AGRANDIR

Ici, la clé pour parvenir à la validation est de savoir correctement ce que nous voulons traiter, par exemple dans le cas d'un nom d'utilisateur, ce que nous demandons normalement sont des caractères alphanumériques et des tirets, c'est pourquoi dans le expression régulière On valide ça, il faut aussi qu'il soit supérieur à 0 caractères et au maximum à 32, si ce qui est saisi par l'utilisateur répond à tout ça, ça passe la validation, le mieux c'est que ça marche avec une valeur comme par exemple cent, car il est totalement dynamique .
Une autre menace contre laquelle nous devons nous protéger est l'exécution de scripts à partir d'autres sites, grâce à AJAX Nous pouvons envoyer des formulaires du client à un itinéraire, y compris le type de demande et les valeurs que nous voulons.
Point faibleCe genre de faiblesse rend très facile pour quelqu'un d'inspecter notre formulaire et de vérifier nos champs, où en possédant ces noms et la méthode HTTP Essayez d'envoyer des valeurs non sécurisées, pour éviter cela, nous devons appliquer des techniques qui nous permettent de valider d'où vient la demande et s'il est sûr de permettre son exécution, sinon évitez de continuer le chemin dans notre programme.
Pour éviter ce problème, un système de jetons Oui séances, de sorte que lorsque le formulaire est soumis, nous évaluons si la session est la même que celle établie de manière sécurisée, et donc l'utilisateur malveillant ne peut pas continuer.
Un objectif clé d'un attaquant est de pouvoir insérer son code dans notre environnement, pour cela il utilise des injections de code SQL, cette attaque est connue sous le nom Injection SQL, où avec des formulaires non sécurisés et un traitement inapproprié, nous pouvons recevoir des instructions SQL directement sans limites. Par exemple si notre évaluation SQL est le suivant dans notre script PHP:

Nous pouvons utiliser n'importe quel utilisateur du système comme nom d'utilisateur et pour le le mot de passe nous utilisons deux scripts “--” avec cela, nous pouvons passer la sécurité sans problème, car deux scripts sont un commentaire SQL et donc le mot de passe ne sera pas évalué.
La bonne façon de évaluer un SQL qui provient de l'utilisateur, supprime les caractères spéciaux et dangereux, n'évaluant que les expressions sûres. Voyons ci-dessous un exemple de la façon d'éviter le cas précédent :
La première chose que nous devons faire est un désinfection des données, c'est-à-dire l'empêcher d'arriver pur de la forme à notre SQL; La deuxième chose que nous devons évaluer est que si les deux valeurs correspondent pour donner accès, mais que cette dernière correspond à la logique de chacune, voyons dans l'image comment nous atteignons l'objectif :

AGRANDIR

Ici, ce que nous avons fait est d'utiliser l'outil déclarations préparées ce que la librairie nous permet AOP pour la connexion à Base de données, avec cela nous obtenons que ce qui est entré n'est jamais pris dans un autre contexte qui n'est pas une donnée, nous voyons aussi qu'au lieu d'utiliser la méthode PUBLIER Nous avons utilisé notre baie sécurisée, cela signifie que nos données sont déjà vérifiées, donc le risque est moindre.
Avec cela, nous avons terminé ce tutoriel, car nous voyons que les actions que nous pouvons entreprendre pour rendre notre application plus sécurisée sont simples, elles ne nécessitent pas d'effort humain, mais elles nous aident à éviter les attaques les plus courantes et peut-être les plus fréquentes .. sont donnés. Il y a une mauvaise perception de PHP de ceux qui disent que c'est un langage non sécurisé, mais la réalité est que l'insécurité est produite par le programmeur, car le langage ne dispose que d'outils que nous pouvons utiliser pour améliorer et prévenir les attaques contre nos applications grâce aux données saisies par l'utilisateur.

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave